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-apply(lambda x: )的使用及说明
这篇文章主要介绍了Python-apply(lambda x: )的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-02-02Python利用pandas和matplotlib实现绘制圆环图
在可视化的过程中,圆环图是一种常用的方式,特别适合于展示各类别占比情况,本文将介绍如何使用 Python中的 pandas 和 matplotlib 库,来制作一个店铺销量占比的圆环图,需要的可以参考下2023-11-11python使用win32com在百度空间插入html元素示例
这篇文章主要介绍了python使用win32com在百度空间插入html元素的示例,大家参考使用吧2014-02-02
最新评论