2016-11-16 258 views
2

我已經使用枕頭將圖像加載爲numpy數組,並且生成的numpy數組的維數爲(184,184,4),即它是一個184x184像素的圖像,每個像素具有RGBA尺寸。將RGBA numpy數組轉換爲二進制2d numpy數組

對於所有的實際用途,我的應用程序只需要知道一個像素是否黑色,因此我只需要一個帶有0,1的184x184 np數組。

我是新來的numpy,特別是圖像處理,想知道是否有更快的方法來做到這一點。

我試着在循環中檢查每個像素的天真實現,這看起來太昂貴了。

回答

2

如果我理解正確,你有一個形狀的數組(184,184,4),你想得到一個帶形狀的布爾數組(184,184),這取決於最終維數是否等於[0,0,0,0 ]

image = np.random.randint(0, 255, size=(184, 184, 4)) #Generate random image 
isBlack = np.int64(np.all(image[:, :, :3] == 0, axis=2)) 

完成!

但它是如何工作的?這看起來很神奇! Numpy有點神奇。這就是我們喜歡它的原因。在這種情況下:

  • == 0轉換爲根據每個數是否一(184,184,4)布爾陣列的圖像是在這種情況下,我們使用圖像[等於0
  • :,:,:3 ]排除等式中的第4個數
  • np.all詢問所有元素是否等於0.
  • axis參數更改它所查看的軸,記住python從0開始計數,所以第三軸是數字2.
+0

如果我想要0或1而不是True或假的。 –

+0

isBlack = np.int16((np.all(image == 0,axis = 2))) –

+0

另外我想要最終維度等於[0,0,0,<我不關心這個地方>] –