大量替换值

时间:2020-06-03 14:51:02

标签: python numpy

我得到了一个rgb图像(h和w不是常数),我想将一定范围(rgb范围)内的所有像素涂成绿色。 我使大部分代码都能正常工作,这是我苦苦挣扎的事情: 假设我得到以下图像:

arr = np.zeros((4,4,3))
arr[0,0] = [2,3,4]
arr[1, 1] = [1, 2, 3]

让我们假设条件是满足以下规则的所有像素:

t = np.all((arr >= [1,2,3])&(arr <= [1,4,4]),axis = 2)
print(t)
[[False False False False]
[False  True False False]
[False False False False]
[False False False False]]

t中的每个值代表arr中的一个像素,如果是的话,我想将arr中的相应像素更改为[10,10,10]。 表示我希望输出为:

[[[2. 3. 4.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [10. 10. 10.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]

我正在寻求一种麻木的方式。

1 个答案:

答案 0 :(得分:1)

您想做的IIUC:

arr[t] = [10,10,10]

示例:

>>> arr = np.zeros((4,4,3))
>>> arr[0,0] = [2,3,4]
>>> arr[1,1] = [1,2,3]
>>> t = np.all((arr >= [1,2,3])&(arr <= [1,4,4]),axis = 2)
>>> arr[t] = [10,10,10]
>>> arr
array([[[ 2.,  3.,  4.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [10., 10., 10.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])