Pytorch 中的 张量tensor《----》 PIL 转换

本文介绍了一系列用于图像处理的PyTorch函数,包括从PIL读取图片并转化为Tensor,从Tensor还原为PIL图片,直接展示及保存Tensor格式图片的方法。还提供了将Numpy格式图片转化为Tensor的技巧,以及调试函数执行过程的工具。
部署运行你感兴趣的模型镜像

需要导入的工具库:
import torch
from PIL import Image
import matplotlib.pyplot as plt
from torchvision import transforms as T

# loader使用torchvision中自带的transforms函数
loader = transforms.Compose([ transforms.ToTensor() ])
#在.Compose()中可添加多个操作,对图片进行改变
unloader = transforms.ToPILImage()

1. PIL读取图片转化为Tensor
输入图片地址返回tensor变量:

def  image_loader(image_name):
		image = Image.open(image_name).convert(‘RGB’)
		image = loader(image).unsqueeze(0)
		return  image.to(device, torch.float) 

2. Tensor转化为PIL图片
输入tensor变量 输出 PIL格式图片:

def  tensor_to_PIL(tensor):
		image = tensor.cpu().clone()
		image = image.squeeze(0)
		image = unloader(image)
		return  image

3. 直接展示tensor格式图片

def  imshow(tensor, title=None):
	image = tensor.cpu().clone()
	image = image.squeeze(0) 
	image = unloader(image)
	#先转换成PIL格式的image,再展示
	plt.imshow(image)

** 4、直接保存tensor格式图片**

def  save_image(tensor, **para):
		dir = ‘./results’
		image = tensor.cpu().clone() 
		image = image.squeeze(0)
		 image = unloader(image)
		 #先转换成PIL格式的image,再保存
		if not os.path.exists(dir):
			os.makedirs(dir)
		image.save(‘results_{}/s{}-c{}-l{}-e{}-sl{:4f}-cl{:4f}.jpg’.format(num,‘style_weight’,‘content_weight’,‘lr’,‘epoch’,‘style_loss’,‘content_loss’)) 

5. 将 N * H * W * C 的numpy格式图片转化为相应的tensor格式:

def  toTensor(img):
		img = torch.from_numpy( img.transpose((0, 3, 1, 2)) )
		return  img.float().div(255).unsqueeze(0)

Numpy的ndarray 或者Tensor转化成PILImage类型【在数据类型上,两者都有明确的要求】

1. ndarray的数据类型要求:

dtype=uint8, range[0, 255] and shape H x W x C

2. Tensor 的shape为: C * H * W 要求:

FloadTensor的,不允许DoubleTensor或者其他类型.

可以直接使用 pip torchsnooper 来安装:
用 **

@torchsnooper.snoop()

** 装饰一下要调试的函数,这个函数在执行的时候,就会自动print 出来每一行的执行结果的 tensor 的形状、数据类型、设备、是否需要梯度的信息

在使用

matplotlib的过程中:

常常会需要画很多图,但是好像并不能同时**展示许多图。**这是因为python可视化库matplotlib的显示模式默认为阻塞(block)模式。
什么是阻塞模式那?我的理解就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去。如果需要继续执行程序,就要关闭图片。
那如何展示动态图或多个窗口呢?这就要使用

图前 plt.ion() — 图后 plt.ioff()

这2个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值