2017-06-12 77 views
0

我正在尋找Python中的快速圖像像素操作。有什麼辦法可以更快地與兩個rgb值進行比較?快速像素比較

img_new = np.ones(img_org.shape[:2], dtype="uint8") * 0 
for i in range(img_org.shape[0]): 
    for j in range(img_org.shape[1]): 
     if img_org[i, j][0] == 0 and img_org[i, j][2] == 0: 
      img_new [i, j] = 255 
     else: 
      img_new [i, j] = 0 

回答

1

可以使用在numpy的「矢量化」比較:

img_new = np.zeros(img_org.shape[:2], dtype="uint8") 
img_new[(img_org[:, :, 0] == 0) & (img_org[:, :, 2] == 0)] = 255 

表達img_org[:, :, 0] == 0取像素的所有第一組分(可能是紅色信道)的子陣列,並返回一個布爾數組大小相同作爲True的圖像,其中紅色通道爲0,否則爲False。然後對綠色通道進行同樣的操作,我們使用&來查找紅色和綠色通道都爲零的所有像素。然後,我們使用此遮罩將匹配像素更新爲255.

另請注意,我將np.ones(...) * 0替換爲np.zeros(),並且我們不需要代碼中的else分支。我們不接觸的像素已經爲零。

+0

令人敬畏的速度和代碼改進!很好的解釋,多謝@Sven Marnach – snowflake