替换阈值以上的所有rgb值

时间:2019-04-24 18:32:35

标签: python numpy matrix rgb

我有一个充满RGB值的numpy 3 d数组,例如 形状=(高度,宽度,3)

  matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])

如果任何一个值高于阈值,我都必须替换RGB值,例如,阈值= 0.8,则替换= [2,2,2],然后

matrix = [[[0,0.5,0.6],[2,2,2]]

我该如何使用numpy以高效的方式做到这一点? 目前,我正在使用double for循环,并检查是否有任何rgb值高于阈值,我将其替换,但是对于n = 4000数组,这是非常缓慢的。

我如何使用numpy来提高效率,也许使用np.where来做到这一点?

1 个答案:

答案 0 :(得分:1)

我将您的矩阵扩展了另一个width维度。

matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])

您可以在第2轴上使用np.any(从0开始,所以第三个轴)来构建蒙版:

mask = np.any((matrix > 0.8), axis=2)

# mask:
array([[False,  True],
       [False,  True]], dtype=bool)

matrix[mask] = np.array([2,2,2])

您产生的matrix

array([[[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]],

       [[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]]])