我使用cv2.imread和cv2.imdecode取决于我是从磁盘还是从url加载图像。相比之下,我使用image.load从磁盘加载,利用libpng。当使用cv2时,我的image.shape输出(高度,宽度,通道)。但是使用手电筒时,形状是(通道,高度,宽度)。
我很好奇为什么会这样,以及如何让两者相提并论。我的目标是将使用cv2下载的许多图像组合成利用(通道,高度,宽度)尺寸的火炬张量。当我用cv2下载时,我试图重塑numpy数组,但是这些张量与使用torch下载的那些不匹配。
答案 0 :(得分:2)
不同的库可能会以不同的内存格式存储图像数据 - 这完全取决于库及其用途(遍历图像数据的速度,内存效率等等)。
对于您的问题,可能的解决方案(没有其他第三方工具)可以使用transpose
。一个简单的例子:
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
答案 1 :(得分:0)
结帐lutorpy:
Lutorpy是一个用于在python中使用火炬进行深度学习的库,通过Python / Numpy和Lua / Torch之间的双向桥接,您可以在python中使用任何Torch模块(nn,rnn等),并轻松转换火炬和numpy之间的变量(数组和张量)。
它内置支持从numpy数组到Torch张量对象的转换,请参阅github上的“示例用法”:
## convert the numpy array into torch tensor
xt = torch.fromNumpyArray(xn)