首页 > 解决方案 > 替换所有高于阈值的 rgb 值

问题描述

我有一个充满 RGB 值的 numpy 3 d 数组,例如 shape = (height,width,3)

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

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

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

如何使用 numpy 以高效的方式做到这一点?目前我正在使用双循环并检查是否有任何 rgb 值高于阈值,我替换它但是对于 n = 4000 数组来说这很慢。

我如何使用 numpy 更有效地做到这一点,也许使用 np.where ?

标签: pythonnumpymatrixrgb

解决方案


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

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

np.any您可以在轴 2 上使用(从 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. ]]])

推荐阅读