所以這裏是一個矢量化的解決方案。你的圖像基本上是由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