图像尺寸与cv2(python)和torch/image(libpng)的差异

图像尺寸与cv2(python)和torch/image(libpng)的差异,python,image,opencv,lua,torch,Python,Image,Opencv,Lua,Torch,我使用cv2.imread和cv2.imdecode,这取决于我是从磁盘还是从url加载图像。相比之下,我使用image.load从磁盘加载,它使用libpng。使用cv2时,my image.shape输出为(高度、宽度、通道)。但是,使用火炬时,形状为(通道、高度、宽度) 我很好奇为什么会这样,以及我怎样才能使两者相等。我的目标是利用(通道、高度、宽度)维度将许多使用cv2下载的图像组合成火炬张量。我曾尝试在使用cv2下载时重塑numpy数组,但张量与使用torch下载的张量不匹配 不同的库

我使用cv2.imread和cv2.imdecode,这取决于我是从磁盘还是从url加载图像。相比之下,我使用image.load从磁盘加载,它使用libpng。使用cv2时,my image.shape输出为(高度、宽度、通道)。但是,使用火炬时,形状为(通道、高度、宽度)


我很好奇为什么会这样,以及我怎样才能使两者相等。我的目标是利用(通道、高度、宽度)维度将许多使用cv2下载的图像组合成火炬张量。我曾尝试在使用cv2下载时重塑numpy数组,但张量与使用torch下载的张量不匹配

不同的库可能以不同的内存格式存储图像数据-这完全取决于库及其用途(遍历图像数据的速度、内存效率等)

对于您的问题,一个可能的解决方案(无需进一步的第三方工具)是使用
转置
。一个简单的例子:

import numpy as np

x = np.random.random((3, 15, 17))
print(x.shape)

# transpose axes with this order
y = x.transpose((1,2,0))
print(y.shape)

# for the sake of testing the euqality of the respective slides:
print(np.linalg.norm(x[0,:,:] - y[:,:,0]))
样本输出:

(3, 15, 17)
(15, 17, 3)
0.0
退房:

Lutorpy是一个为深入学习python中的torch而构建的库,通过python/Numpy和Lua/torch之间的双向桥梁,您可以使用python中的任何torch模块(nn、rnn等),并轻松地在torch和Numpy之间转换变量(数组和张量)

它内置了从numpy数组到Torch tensor对象的转换支持,请参见github上的“示例用法”:

## convert the numpy array into torch tensor
xt = torch.fromNumpyArray(xn)

太好了,我必须使用转置和矩阵操作的组合来使我的np数组相等。不过谢谢你的引导。