我是Python新手,很难理解Python中的图像形状转换。
在Python代码中,图像I has I.shape
ipdb> I.shape
(720, 1280, 3)
在Python中运行此命令会将I's shape
转换为存储到h5_image
h5_image = np.transpose(I, (2,0,1)).reshape(data_shape)
data_shape是:
ipdb> p data_shape
(1, 3, 720, 1280)
OpenCV的相似功能是什么?它具有相同的输出?
在(1, 3, 720, 1280)
中,1是什么意思?
(3, 720, 1280)
和(720, 1280, 3)
有什么区别?
答案 0 :(得分:3)
你可以在python / numpy中查看图像(I
)作为具有N维的矩阵。
I.shape --> (rows, cols)
I.shape --> (rows, cols, 3)
I.shape --> (rows, cols, 4)
这些是保存图像数据的常用方法,但当然您可以以任何您喜欢的方式保留它,只要您知道如何阅读它。例如,您可以将其保持为1维中的一个长向量,并保持图像的宽度和高度,以便您知道如何将其读取为2D格式。
有关更具体的问题:
(1, 3, 720, 1280)
仅表示您有一个额外的退化维度。要访问每个像素,您必须编写I[1,channel,row,col]
。 1
是不必要的,并且它不是保持图像数组的常用方法。你为什么要这样做?您想以特定格式保存吗? (HDF5?)(3, 720, 1280)
的情况下,要获取红色通道,您需要编写:red = I[0,:,:]
。在(720, 1280, 3)
的情况下,你需要写:red = I[:,:,0]
(这是更常见的)。*有一些性能问题取决于您记忆中图像数据的实际布局,但我认为您现在不需要关心这一点。