我有RGB格式或灰度格式的圖像(我通過Gimp轉換它,現在我們說),現在每次我加載圖像的灰度,或者只是將其轉換爲灰度格式,形狀總是說[高度,寬度]沒有第三維(顏色通道的數量)。如何將黑白圖像轉換爲python中的三維數組?
我知道,一般的B/W圖像存儲在這樣的格式,但我特別需要的[height, width, 1]
圖像形狀,一個你會用得到的,比方說:
numpy.zeros(shape=[400, 400, 1])
我有RGB格式或灰度格式的圖像(我通過Gimp轉換它,現在我們說),現在每次我加載圖像的灰度,或者只是將其轉換爲灰度格式,形狀總是說[高度,寬度]沒有第三維(顏色通道的數量)。如何將黑白圖像轉換爲python中的三維數組?
我知道,一般的B/W圖像存儲在這樣的格式,但我特別需要的[height, width, 1]
圖像形狀,一個你會用得到的,比方說:
numpy.zeros(shape=[400, 400, 1])
您可以隨時添加「空「尺寸使用np.expand_dims
:
>>> a2d = np.ones((100, 200))
>>> a3d = np.expand_dims(a, axis=2)
>>> a3d.shape
(100, 200, 1)
或通過用None
或np.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)
有一個內置的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)
無論有沒有張貼的解決方案爲你工作的? – Divakar
是的,這兩個解決方案工作,我忘記標記其中之一被指責,謝謝提醒! – danchy