如何将 Torch 图像切片为 numpy 图像

Posted

技术标签:

【中文标题】如何将 Torch 图像切片为 numpy 图像【英文标题】:How to slice Torch images as numpy images 【发布时间】:2019-05-11 09:35:13 【问题描述】:

我正在解决一个问题,我有坐标可以像

一样对图像进行切片

要裁剪的区域的X坐标、Y坐标、高度、宽度

如果我有使用获得的手电筒图像

img = Variable(img.cuda())

我们如何分割这张图片以获得图片的特定区域 [y:y+height, x:x+width] 。 谢谢

【问题讨论】:

【参考方案1】:

如果我正确理解了你的问题,那么你可以像在 numpy 中那样做。

这是一个简短的例子:

import torch
t = torch.rand(5, 5)
# original matrix
print(t)
h = 2
w = 2
x = 1
y = 1
# cropped out matrix
print(t[x:x+h, y:y+w])

输出:

tensor([[ 0.5402,  0.4106,  0.9904,  0.9556,  0.2217],
        [ 0.4533,  0.6300,  0.5352,  0.2710,  0.4307],
        [ 0.6389,  0.5660,  0.1582,  0.5701,  0.1614],
        [ 0.1717,  0.4071,  0.4960,  0.2127,  0.5587],
        [ 0.9529,  0.2865,  0.6667,  0.7401,  0.3372]])
tensor([[ 0.6300,  0.5352],
        [ 0.5660,  0.1582]])

如您所见,从t 中裁剪出一个 2x2 矩阵。

【讨论】:

除此之外,在处理 2d 图像时,张量通常为 4d [batch, feature, width, height],因此您想要切片 t[:, :, width, height]t[..., width, height](等效符号)。跨度> 【参考方案2】:

我得到了使用这个符号的解决方案

img[:, :, y:y+height, x:x+width]

所以输出将是一个调整大小的火炬图像。谢谢

【讨论】:

以上是关于如何将 Torch 图像切片为 numpy 图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .tif PIL 图像转换为火炬张量?

使用 numpy 图像切片器在 python 中加入编辑的图像

np.ndarray与torch.Tensor之间的转化 (图像的区别)

如何在不获取“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片

有效地使用多个 Numpy 切片进行随机图像裁剪

Python:如何从图像中切出具有特定颜色的区域(OpenCV,Numpy)