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

总结

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

相关文章

  • 20行python代码的入门级小游戏的详解

    20行python代码的入门级小游戏的详解

    这篇文章主要介绍了python入门级小游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python+selenium+chromedriver实现爬虫示例代码

    python+selenium+chromedriver实现爬虫示例代码

    这篇文章主要介绍了python+selenium+chromedriver实现爬虫示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python全栈之进程和守护进程

    Python全栈之进程和守护进程

    这篇文章主要为大家介绍了Python进程和守护进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python实现Linux命令xxd -i功能

    Python实现Linux命令xxd -i功能

    这篇文章主要介绍了Python实现Linux命令xxd -i功能的相关资料,需要的朋友可以参考下
    2016-03-03
  • Python中格式化format()方法详解

    Python中格式化format()方法详解

    这篇文章主要介绍了 Python中格式化format()方法详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • python HTTPX库实现同步异步请求用法示例

    python HTTPX库实现同步异步请求用法示例

    这篇文章主要为大家介绍了python HTTPX库实现同步异步请求用法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Django如何自定义model创建数据库索引的顺序

    Django如何自定义model创建数据库索引的顺序

    这篇文章主要介绍了Django如何自定义model创建数据库索引的顺序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Python面向对象之继承原理与用法案例分析

    Python面向对象之继承原理与用法案例分析

    这篇文章主要介绍了Python面向对象之继承原理与用法,结合具体案例形式分析了Python面向对象程序设计中继承的原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • 通过 Django Pagination 实现简单分页功能

    通过 Django Pagination 实现简单分页功能

    这篇文章主要介绍了通过 Django Pagination 实现简单分页功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python queue模块攻略全解

    Python queue模块攻略全解

    这篇文章主要为大家介绍了Python queue模块攻略全解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论