12-13 常见的transoforms

一、函数基本功能

  1. 输入
  • PIL:Image.open()
  • tensor:ToTensor()
  • narrays:cv.imread()
  1. 输出
    不知道返回类型的时候
  • print(type())
  • print()
  • debug
  1. 参数
  2. 作用

多看官方文档

二、各个函数的功能

  1. 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") #利用函数赋值

image

ctrl+p :查看参数

  1. ToTensor方法
  • 功能:将图片转化为tensor类型
  1. Normalize方法
  • 功能:归一化

  • 输入:给出三个信道 (R, G, B)的平均值和标准差,并进行计算,计算公式为-> channel = (channel - mean) / std
    image

  • 归一化后的效果
    image

代码提示不区分大小写

image

没有resize方法:升级torchvision0.11.3 对应torch1.10.2

  1. resize方法
  • 功能:进行等比缩放

  • 输入:PIL

  • 输出:PIL

  • 运行结果:
    点击图片可以放大
    image

  1. compose的用法
  • 功能:compose:对各个transforms进行整和
    image

运行结果:
image

  1. RandomCrop方法
  • 功能:随机裁剪
    image

  • 指定宽高
    image

三、完整代码

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

posted @ 2022-05-11 13:06  Trouvaille_fighting  阅读(89)  评论(0)    收藏  举报