保存图片主要使用save_image,定义如下:
torchvision.utils.save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False)
注意:normalize=False代表只能将(0,1)的图片存储起来
? ? ? ? ? ?normalize=True将(0,255)的图片存储起来
具体介绍见torchvision.utils — Torchvision 0.10.0 documentation
?保存单张图片
保存的图片像素值本身就是在(0-1)内的图片
from torchvision.utils import save_image
a = torch.ones([3,100,100])
save_image(a,'white.png')
#像素值为(255,255,255)为白色
#但是save_image(normalize=False)接受的tensor范围为(0,1),超过1的按1算
?保存的图片像素值本身就是在(-1,1)内的图片
像素值出现在(-1,1)的原因是:
transforms.ToTensor()将图片归一化到(0,1)
?transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])将图片归一化到(-1,1)
def de_norm(x):
out = (x + 1) / 2
return out.clamp(0, 1)
#image是在cuda上的一张图片
#所以image是由batch_size=1的情况下的
#image.size(1,3,256,256)所以要squeeze()一下
image = de_norm(image).squeeze()
save_image(image,'image_name.png')
保存多张图片
a = torch.ones([1, 3, 100, 100])
b = a * 0.6
c = a * 0.3
d = a * 0.1
images = torch.cat([a,b,c,d],dim=3)
print(images.size()) #torch.Size([1, 3, 100, 400])
save_image(images,'grid.png')
?
读取图片将PIL转为tensor
from PIL import Image
totensor = transforms.Compose([transforms.ToTensor()]) #将(0,255)-->(0,1)
iamge = Image.open('red.png').convert('RGB')
image = totensor(image)
#也可以
#totenor = transforms.Compose([transform.ToTensor(),
# transforms.Normalize((0.5, 0.5, 0.5),
# (0.5, 0.5, 0.5))]) #将(0,1)-->(-1,1)
?
?
?
|