将所有rgb值替换为阈值以上

问题描述 投票:1回答:1

我有一个充满RGB值的numpy 3d数组,例如shape =(height,width,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]]

我怎么能用一个有效的甘露聚糖呢?目前我正在使用双循环并检查是否有任何rgb值高于阈值,我替换它但是对于n = 4000数组这是安静的慢。

如何使用numpy来提高效率,或者使用np.where?

python numpy matrix rgb
1个回答
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. ]]])
© www.soinside.com 2019 - 2024. All rights reserved.