2017-05-08 261 views
2

我有RGB格式或灰度格式的圖像(我通過Gimp轉換它,現在我們說),現在每次我加載圖像的灰度,或者只是將其轉換爲灰度格式,形狀總是說[高度,寬度]沒有第三維(顏色通道的數量)。如何將黑白圖像轉換爲python中的三維數組?

我知道,一般的B/W圖像存儲在這樣的格式,但我特別需要的[height, width, 1]圖像形狀,一個你會用得到的,比方說:

numpy.zeros(shape=[400, 400, 1]) 
+0

無論有沒有張貼的解決方案爲你工作的? – Divakar

+1

是的,這兩個解決方案工作,我忘記標記其中之一被指責,謝謝提醒! – danchy

回答

2

您可以隨時添加「空「尺寸使用np.expand_dims

>>> a2d = np.ones((100, 200)) 
>>> a3d = np.expand_dims(a, axis=2) 
>>> a3d.shape 
(100, 200, 1) 

或通過用Nonenp.newaxis切片:

>>> a2d[..., None].shape # instead of "..." (Ellipsis) you could also use `[:, :, None]` 
(100, 200, 1) 

我更喜歡np.expand_dims,因爲它比切片更清晰。


如果你需要有條件,檢查arr.ndim第一:

if arr.ndim == 2: 
    arr = np.expand_dims(arr, axis=2) 
2

有一個內置的np.atleast_3d正是爲了這個目的 -

np.atleast_3d(img) 

這個內置的採用的護理通過在2D數組中添加一個新軸作爲最後一個,保持輸出形狀爲3D,並且不會更改3D投入,所有照顧下的引擎蓋。

採樣運行 -

In [42]: img = np.random.randint(0,255,(800,600)) # grayscale img 

In [43]: np.atleast_3d(img).shape 
Out[43]: (800, 600, 1) 

In [44]: img = np.random.randint(0,255,(800,600,3)) # RGB img 

In [45]: np.atleast_3d(img).shape 
Out[45]: (800, 600, 3) 
+0

我只嘗試過'np.array(img,ndmin = 3,copy = False)',但這只是預先設定尺寸。很高興知道他們有另外一個附加維度的功能。 :) – MSeifert

+0

另一件「關心它在引擎蓋下」聽起來不對。你的意思是「照顧它......」嗎? – MSeifert

+1

@ MSeifert在那裏沒有任何單詞。編輯更有意義。 – Divakar

相關問題