图像尺寸与cv2(python)和火炬/图像(libpng)的差异

时间:2016-06-02 08:12:01

标签: python image opencv lua torch

我使用cv2.imread和cv2.imdecode取决于我是从磁盘还是从url加载图像。相比之下,我使用image.load从磁盘加载,利用libpng。当使用cv2时,我的image.shape输出(高度,宽度,通道)。但是使用手电筒时,形状是(通道,高度,宽度)。

我很好奇为什么会这样,以及如何让两者相提并论。我的目标是将使用cv2下载的许多图像组合成利用(通道,高度,宽度)尺寸的火炬张量。当我用cv2下载时,我试图重塑numpy数组,但是这些张量与使用torch下载的那些不匹配。

2 个答案:

答案 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)