Pytorch之ToPILImage()不输出图片问题及解决

 更新时间:2024年02月27日 10:30:37   作者:Adversity-sl  
这篇文章主要介绍了Pytorch之ToPILImage()不输出图片问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Pytorch ToPILImage()不输出图片

先导torchvision包

from PIL import Image
from torchvision.transforms import ToTensor,ToPILImage

定义转换操作

img_to_tensor = ToTensor() # img -> tensor
tensor_to_pil = ToPILImage() # tensor -> img

读取图片

img = Image.open('../test.jpg') # ‘' 引号内为要读取图片的相对路径

把读取的图片转换成tensor进而对其操作,

unsqueeze(0)是在给转换后的tensor加一个维度

input = img_to_tensor(img).unsqueeze(0) #torch.Size([1, 3, 960, 720])

对图像进行一个简单的操作,此处用的3*3的kernel进行锐化卷积

kernel = t.ones(3,3)/-9.
kernel[1][1] = 1
conv = nn.Conv2d(1,1,(3,3),1,bias=False) #卷积
conv.weight.data = kernel.view(1,1,3,3) #权重

将图片传入卷积层,并输出

out = conv(V(input)) 
tensor_to_pil(out.data.squeeze(0)).show()

注意,此处若不用.show()则输出台无显示。

另附torchvision.transforms.ToTensor及torchvision.transforms.ToPILImage的转换过程

torchvision.transforms.ToTensor

对于一个图片img,调用ToTensor转化成张量的形式,发生的不是将图片的RGB三维信道矩阵变成tensor

图片在内存中以bytes的形式存储,转化过程的步骤是:

  • img.tobytes() 将图片转化成内存中的存储格式
  • torch.BytesStorage.frombuffer(img.tobytes() ) 将字节以流的形式输入,转化成一维的张量
  • 对张量进行reshape
  • 对张量进行permute(2,0,1)
  • 将当前张量的每个元素除以255
  • 输出张量

torchvision.transforms.ToPILImage

对于一个Tensor的转化过程是:

  • 将张量的每个元素乘上255
  • 将张量的数据类型有FloatTensor转化成Uint8
  • 将张量转化成numpy的ndarray类型
  • 对ndarray对象做permute (1, 2, 0)的操作
  • 利用Image下的fromarray函数,将ndarray对象转化成PILImage形式
  • 输出PILImage

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现国外赌场热门游戏Craps(双骰子)

    Python实现国外赌场热门游戏Craps(双骰子)

    这篇文章主要介绍了Python实现国外赌场热门游戏Craps(双骰子)的源码及运行方法,十分简单,有需要的小伙伴可以参考下。
    2015-03-03
  • python使用webdriver爬取微信公众号

    python使用webdriver爬取微信公众号

    这篇文章主要为大家详细介绍了python使用webdriver爬取微信公众号信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python+OpenCV感兴趣区域ROI提取方法

    Python+OpenCV感兴趣区域ROI提取方法

    今天小编就为大家分享一篇Python+OpenCV感兴趣区域ROI提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 基于Python开发电脑定时关机工具

    基于Python开发电脑定时关机工具

    这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • 脚本测试postman快速导出python接口测试过程示例

    脚本测试postman快速导出python接口测试过程示例

    这篇文章主要介绍了关于脚本测试postman快速导出python接口测试示例的过程操作,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • 如何使用OpenCV进行视频读取与处理的完整指南

    如何使用OpenCV进行视频读取与处理的完整指南

    OpenCV是一个开源的计算机视觉和机器学习软件库,广泛应用于图像和视频的处理,本篇文章将详细解析如何使用OpenCV读取和处理视频,并结合实际的代码示例来展示操作的全过程,同时探讨一些性能优化的策略
    2024-08-08
  • python实现二次元图片展示(屏保)

    python实现二次元图片展示(屏保)

    这篇文章主要介绍了python实现二次元图片展示,用了API端口相关的知识实现,下面详细的文章内容需要的小伙伴可以参考一下
    2022-02-02
  • Python实现冒泡排序算法的示例解析

    Python实现冒泡排序算法的示例解析

    冒泡排序(Bubble Sort)是一种简单的排序算法。本文将详细为大家讲讲Python实现冒泡排序算法的方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-06-06
  • 在Ubuntu系统中运行python代码的几个步骤

    在Ubuntu系统中运行python代码的几个步骤

    项目中需要在Linux上运行自己写的python脚本,特此记录一下操作流程,整个流程比较简单,下面这篇文章主要给大家介绍了关于在Ubuntu系统中运行python代码的几个步骤,需要的朋友可以参考下
    2023-12-12
  • Python读取VOC中的xml目标框实例

    Python读取VOC中的xml目标框实例

    这篇文章主要介绍了Python读取VOC中的xml目标框实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论