所以这里是一个矢量化的解决方案。你的图像基本上是由3个(颜色)阵列组成的h。所以我们可以利用不易掌握但非常强大的广播规则。
因此,基本上我们将整个数组与一个3向量与您正在查找的值进行比较。由于广播规则,Numpy会将每个像素与这三个向量进行比较,并告诉您它是否匹配(因此在这种特定情况下,如果红色,绿色和蓝色匹配)。所以你最终会得到一个与图像大小相同的布尔数组和真值。
现在我们只想找到所有三种颜色匹配的像素。为此,我们使用“all”方法,如果数组的所有值都为true,则这是真的。如果我们将它应用到某个轴 - 在这种情况下是颜色轴 - 我们可以通过h数组得到一个w数组,无论所有颜色匹配。
现在我们可以将这个二维布尔模板应用到我们原来的w中,由h乘以3的数组并获得匹配我们颜色的像素。我们现在可以重新分配他们 - 再次与广播。
下面是示例代码
import numpy as np
#create a 2x2x3 image with ones
img = np.ones((2,2,3))
#make the off diagonal pixels into zeros
img[0,1] = [0,0,0]
img[1,0] = [0,0,0]
#find the only zeros pixels with the mask
#(of course any other color combination would work just as well)
#... and apply "all" along the color axis
mask = (img == [0.,0.,0.]).all(axis=2)
#apply the mask to overwrite the pixels
img[ mask ] = [255,0,0]
什么是你的形象'.shape'? – gboffi