替换所有高于阈值的 rgb 值

Replace all rgb values above a threshold

我有一个充满 RGB 值的 numpy 3 维数组,例如 形状 = (高度,宽度,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 以高效的方式执行此操作? 目前我正在使用双 for 循环并检查是否有任何 rgb 值高于阈值,我替换它但是这对于 n = 4000 数组来说非常慢。

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

我已经将你的矩阵扩展了另一个 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. ]]])