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

我使用 cv2.imread 和 cv2.imdecode 来从磁盘或者 url 中加载图像。相比之下,我使用 image.load 来从磁盘上加载图像,它使用了 libpng。当使用 cv2 时,我的图像形状输出是 (height, width, channels)。然而当使用 torch 时,形状是 (channels, height, width)。

我很好奇这是为什么,以及如何让它们等同。我的目标是将许多使用 cv2 下载的图像合并成一个利用 (channels, height, width) 尺寸的 torch tensor。我尝试了在使用 cv2 下载的 numpy 数组上进行重塑,但是张量与使用 torch 下载的不匹配。

点赞
用户1150303
用户1150303

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

解决您问题的可能方法(不需要其他第三方工具)可以使用 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
2016-06-02 08:25:55
用户4120764
用户4120764

请看 lutorpy:

Lutorpy 是一个在 Python 中使用 Torch 进行深度学习的库,通过 Python/Numpy 和 Lua/Torch 之间的双向桥梁,您可以在 Python 中使用任何 Torch 模块(nn、rnn 等),并轻松在 Torch 和 Numpy 之间转换变量(数组和张量)。

它已经内置了从 numpy 数组到 Torch 张量对象的转换支持,可在其 GitHub 的 "example usage" 中查看:

## 将 numpy 数组转换为 Torch 张量
xt = torch.fromNumpyArray(xn)
2016-06-02 08:27:38