Transforms的使用

Transforms的结构及用法

Transforms就像一个工具箱,通过transform是里面的类对图片进行一些变换
不同类型是图片打开方式不同,PIL类型用Image.open(),tensor类型用ToTensor(),narrys类型用cv.imread()

常见的transforms

transforms.Compose()

Composes several transforms together.

    Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),
        >>>     transforms.ToTensor(),
        >>> ])

Compose()中参数需要是一个列表,python中,列表的表示数据类型为[数据1,数据2,…],在Compose,数据需要是transforms类型,所以得到Compose([transforms参数1,transforms参数2,…])

transforms.ToTensor()

Convert a PIL Image or numpy.ndarray to tensor.

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("data/train/ants_image/0013035.jpg")
print(img) #打印发现图片是PIL类型

#将一个图像(img)转换为PyTorch张量(tensor)
trans_totensor = transforms.ToTensor() #创建了一个转换器对象trans_totensor,该对象负责将图像转换为张量。
img_tensor = trans_totensor(img) #将图像img转换为张量img_tensor

writer.add_image("ToTensor", img_tensor)
writer.close()

用控制台打开tensorboard,即可看到图片

tensorboard --logdir=logs

transforms.Normalize()

Normalize a tensor image with mean and standard deviation.归一化平均值和标准差
Given mean: (mean[1],...,mean[n]) and std: (std[1],..,std[n]) for n
channels, this transform will normalize each channel of the inputtorch.*Tensor
i.e., output[channel] = (input[channel] - mean[channel]) / std[channel]

光标放在括号内,按住Ctrl+P,可以看各个类需要什么参数
在这里插入图片描述

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("data/train/ants_image/0013035.jpg")
print(img) #打印发现图片是PIL类型

#ToTensor
#将一个图像(img)转换为PyTorch张量(tensor)
trans_totensor = transforms.ToTensor() #创建了一个转换器对象trans_totensor,该对象负责将图像转换为张量。
img_tensor = trans_totensor(img) #将图像img转换为张量img_tensor
writer.add_image("ToTensor", img_tensor)

#Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([6,3,2],[9,3,5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Nomalize", img_norm,1)
writer.close()

在这里插入图片描述

transforms.Resize()

Resize the input image to the given size.
The image can be a PIL Image or a torch Tensor, in which case it is expected
to have […, H, W] shape, where … means an arbitrary number of leading dimensions

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("data/train/ants_image/0013035.jpg")
print(img) #打印发现图片是PIL类型

#ToTensor
#将一个图像(img)转换为PyTorch张量(tensor)
trans_totensor = transforms.ToTensor() #创建了一个转换器对象trans_totensor,该对象负责将图像转换为张量。
img_tensor = trans_totensor(img) #将图像img转换为张量img_tensor
writer.add_image("ToTensor", img_tensor)

#Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([6,3,2],[9,3,5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Nomalize", img_norm,1)
writer.close()

#Resize
print(img.size) #打印显示图片大小为(768,512)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img) #将PIL类型的img resize 为(512,512)
img_resize = trans_totensor(img_resize) #将PIL类型的img_resize转换为tensor类型
print(img_resize)
writer.add_image("Resize", img_resize, 0)
writer.close()

打开tensorboard
在这里插入图片描述

transforms.RandomCrop

随机裁剪
Crop the given image at a random location.
The image can be a PIL Image or a Tensor, in which case it is expected
to have […, H, W] shape, where … means an arbitrary number of leading
dimensions

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("data/train/ants_image/0013035.jpg")
print(img) #打印发现图片是PIL类型

#ToTensor
#将一个图像(img)转换为PyTorch张量(tensor)
trans_totensor = transforms.ToTensor() #创建了一个转换器对象trans_totensor,该对象负责将图像转换为张量。
img_tensor = trans_totensor(img) #将图像img转换为张量img_tensor
writer.add_image("ToTensor", img_tensor)

#Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([6,3,2],[9,3,5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Nomalize", img_norm,1)
writer.close()

#Resize
print(img.size) #打印显示图片大小为(768,512)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img) #将PIL类型的img resize 为(512,512)
img_resize = trans_totensor(img_resize) #将PIL类型的img_resize转换为tensor类型
print(img_resize)
writer.add_image("Resize", img_resize, 0)
writer.close()

#RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
    img_crop = trans_compose(img)
    writer.add_image("RandomCrop", img_crop, i)
writer.close()

总结

  1. 关注输入输出类型
  2. 注重官方文档
  3. 关注方法需要什么参数类型
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值