12-13 常见的transoforms
一、函数基本功能
- 输入
- PIL:Image.open()
- tensor:ToTensor()
- narrays:cv.imread()
- 输出
不知道返回类型的时候
- print(type())
- print()
- debug
- 参数
- 作用
多看官方文档
二、各个函数的功能
- Compose
- 对各个transforms进行整和
- compose中的call方法
class Person:
def __call__(self, name):
print("call"+" name "+name)
def hello(self,name):
print("hello "+name)
person=Person()
person("zhangsan") #直接内部赋值
person.hello("lisa") #利用函数赋值

ctrl+p :查看参数
- ToTensor方法
- 功能:将图片转化为tensor类型
- Normalize方法
-
功能:归一化
-
输入:给出三个信道 (R, G, B)的平均值和标准差,并进行计算,计算公式为-> channel = (channel - mean) / std

-
归一化后的效果

代码提示不区分大小写

没有resize方法:升级torchvision0.11.3 对应torch1.10.2
- resize方法
-
功能:进行等比缩放
-
输入:PIL
-
输出:PIL
-
运行结果:
点击图片可以放大

- compose的用法
- 功能:compose:对各个transforms进行整和

运行结果:

- RandomCrop方法
-
功能:随机裁剪

-
指定宽高

三、完整代码
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs12_13")
#获取图片
img=Image.open('images/img.png')
# print(img)
#1.将图片转化为tensor类型
trans_totensor=transforms.ToTensor()
img_tensor=trans_totensor(img)
#输出tensor类型的图片
writer.add_image("Tensor_img",img_tensor) #输入tensor型
# 2. Normalize
print(img_tensor[0][0][0])
# trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) #分别输入三个信道的均值和标准差
trans_norm=transforms.Normalize([1,4,5],[9,3,1])
img_norm=trans_norm(img_tensor)
print((img_norm[0][0][0]))
# writer.add_image("Normalize",img_norm)
writer.add_image("Normalize",img_norm,3) #执行3轮
# 3.resize
print(img.size)
trans_resize=transforms.Resize((512,512))
# img PIL ->resize->img_resize PIL
img_resize=trans_resize(img)
# img_resize PIL ->totensor ->img_resize tensor
img_resize=trans_totensor(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)
# 4.compose:对各个transforms进行整和
# 使用compose重新实现resize功能
trans_resize_2=transforms.Resize(512) #会以最小的来裁剪
# 输入 PIL->输出 PIL 作为下一次的输入->输出 tensor
trans_compose=transforms.Compose([trans_resize_2,trans_totensor]) #前一个变量的输出是另外一个变量的输入
img_resize_2=trans_compose(img)
writer.add_image("compose_Reisize",img_resize_2,1)
# 5.随机裁剪
# trans_random=transforms.RandomCrop(512) #指定大小
trans_random=transforms.RandomCrop((500,1000)) #指定大小
trans_compose_2=transforms.Compose([trans_random,trans_totensor])
for i in range(10):#裁剪10个
img_crop=trans_compose_2(img)
# writer.add_image("Randomcrop",img_crop,i)
writer.add_image("Randomcrop_W_H", img_crop, i)
writer.close()
在terminal运行代码:
tensorboard --logdir=logs12_13 --host=127.0.0.1

浙公网安备 33010602011771号