我有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