Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyTorch中显示单个图像?_Python_Image Processing_Pytorch - Fatal编程技术网

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
加载并存储在PyTorch
Tensor
中的单个图像。当我试图通过
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)

  • 处理图像数据的PyTorch模块要求张量分别以C×H×W的形式布置:通道、高度和宽度

  • 请注意,我们必须使用
    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