Python 如何在PyTorch中显示单个图像?
我想显示使用Python 如何在PyTorch中显示单个图像?,python,image-processing,pytorch,Python,Image Processing,Pytorch,我想显示使用ImageLoader加载并存储在PyTorchTensor中的单个图像。当我试图通过plt.imshow(图像)显示它时,我得到: TypeError: Invalid dimensions for image data 张量的.shape为: torch.Size([3, 244, 244]) 如何将PyTorch张量显示为图像?如果图像按说明加载并存储在变量image中: plt.imshow(transforms.ToPILImage()(image), interpol
ImageLoader
加载并存储在PyTorchTensor
中的单个图像。当我试图通过plt.imshow(图像)
显示它时,我得到:
TypeError: Invalid dimensions for image data
张量的.shape
为:
torch.Size([3, 244, 244])
如何将PyTorch张量显示为图像?如果图像按说明加载并存储在变量
image
中:
plt.imshow(transforms.ToPILImage()(image), interpolation="bicubic")
#transforms.ToPILImage()(image).show() # Alternatively
或作为:
正如您所看到的,
matplotlib
即使不转换为numpy
数组,也可以正常工作。但是PyTorch张量(“图像张量”)是通道优先的,所以要将它们与matplotlib
一起使用,需要对其进行重塑:
代码:
输出:
<class 'numpy.ndarray'> (768, 1024, 3)
<class 'torch.Tensor'> torch.Size([768, 1024, 3])
<class 'torch.Tensor'> torch.Size([3, 768, 1024])
<class 'torch.Tensor'> torch.Size([768, 1024, 3])
(7681023)
火炬尺寸([7681023])
火炬尺寸([37681024])
火炬尺寸([7681023])
给定图像路径名的完整示例img\u路径
:
from PIL import Image
image = Image.open(img_path)
plt.imshow(transforms.ToPILImage()(transforms.ToTensor()(image)), interpolation="bicubic")
请注意,
transforms.*
返回a,这就是为什么会使用时髦的括号。给定表示图像的张量,用于将通道作为最后一个维度:
plt.imshow( tensor_image.permute(1, 2, 0) )
注:和处理图像数据的PyTorch模块预期张量格式为C×H×W.1
而PILLow和Matplotlib希望图像数组的格式为H×W×C
您可以使用TorchVision变换轻松地将张量转换为/此格式:
来自torchvision的导入转换。功能为F
F.to_pil_图像(图像张量)
或通过直接排列轴:
图像张量排列(1,2,0)
permute
将轴的顺序从C×H×W更改为H×W×C,以符合Matplotlib的预期
使用fastai的show_图像
from fastai.vision.all import show_image
嗯,这对我不起作用,请看带有张量形状的更新问题。哇,谢谢。。。这对我有用。。。我试着做tensor_image.numpy().重塑([224224,3]),并使用cv2.imshow()将其可视化,但我没有得到实际的图像。。。这里出了什么问题?@DevashishPrasad问题是
重塑([224224,3])
与置换(1,2,0)
做的事情不同。permute
函数类似于转置矩阵,其中行变为列,列变为行。重塑
函数做了一些完全无关的事情,我不知道如何简洁地描述。简而言之,重塑
是错误的函数。导入torchvision.transforms#可能会将导入添加到代码中
plt.imshow( tensor_image.permute(1, 2, 0) )
from fastai.vision.all import show_image