当前位置:   article > 正文

pytorch学习(4)——图片变换Transforms使用_transform函数输入一个图像产生几个图像

transform函数输入一个图像产生几个图像

1 Transforms类的使用

为图像变换的函数库。

1.1 导入transforms库

python脚本内输入:

from torchvision import transforms
  • 1

按住Ctrl,点击transforms
进入__init__.py

from .transforms import *
from .autoaugment import *
  • 1
  • 2

按住Ctrl,点击.transforms
进入transforms.py

1.2 Transforms结构及用法

transforms.py工具箱内的函数主要对图像进行变换,包括数据结构转换、尺度变换、高斯模糊、归一化、流水线、裁剪等。

点击Structure(ALT+7)查看包含的函数名。
在这里插入图片描述

  • Compose:流水线操作,将多个图像操作步骤整合到一起。
  • ToTensor:将PIL或ndarray类型的图像转换成张量(tensor)类型。
  • Resize:将输入的图像转换成不同的大小。
  • CenterCrop:对输入的图像进行中心裁剪。
  • ToPILImage:将tensor或ndarray类型的图像转换成PIL类型的图像。
  • GaussianBlur:对输入的图像进行高斯模糊处理。

大多数函数的工作流程:
在这里插入图片描述

Compose函数的工作流程:
在这里插入图片描述
代码如下:

from PIL import Image
from torchvision import transforms

img_path_abs = "G:\\ant.jpg"
img = Image.open(img_path_abs)

data_transform = transforms.Compose([
    transforms.Resize((256, 256)),        # 调整图像大小为256x256
    transforms.RandomCrop((224, 224)),    # 随机裁剪图像为224x224
    transforms.ToTensor(),                 # 将图像转换为张量
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])    # 标准化图像张量
])

transformed_data = data_transform(image)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

python脚本代码如下:

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

img_path_abs = "G:\\ant.jpg"
img = Image.open(img_path_abs)
print(img)

# 如果取消下方注释,则会在tensorboard中写入图像
# writer = SummaryWriter("logs")

# transforms.ToTensor   	PIL -> tensor
trans_totensor = transforms.ToTensor()    # 创建具体工具,实例化对象
tensor_img = trans_totensor(img)
# 以上两步也可以简化为:
# tensor_img = transforms.ToTensor()(img)
print(tensor_img)
try:
    writer.add_image("ToTensor_img", tensor_img, 1)
except NameError:
    print("writer未定义")


# transforms.ToPILImage     tensor -> PIL
trans_PILImage = transforms.ToPILImage()
pil_img = trans_PILImage(tensor_img)
pil_img.show()

# transforms.Normalize 归一化
trans_norm = transforms.Normalize([1, 1, 2], [1, 2, 1])
img_norm = trans_norm(tensor_img)
print("tensor_img")
print(tensor_img[0][0][0])
print("\r\nimg_norm")
print(img_norm[0][0][0])
try:
    writer.add_image("Normalize_img", img_norm, 1)
except NameError:
    print("writer未定义")


# transforms.Resize -1 改变图像比例
print("img.size:" + str(img.size))
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)          # PIL(原图尺寸) -> PIL(512,512)
print("img_resize.size:" + str(img_resize.size))
print("img_resize:" + str(img_resize))
img.show()
img_resize.show()
try:
    writer.add_image("Resize_img", img_resize, 1)
except NameError:
    print("writer未定义")


# Resize -2 不改变图像比例
trans_resize_2 = transforms.Resize(1024)		# PIL(原图尺寸) -> PIL(1024,*)
img_resize_2 = trans_resize_2(img)
print("img.size:" + str(img.size))
print("img_resize_2.size:" + str(img_resize_2.size))
img.show()
img_resize_2.show()
try:
    writer.add_image("Resize_img_2", img_resize_2, 1)
except NameError:
    print("writer未定义")

# RandomCrop
trans_randomcrop = transforms.RandomCrop(512)
img_randomcrop = trans_randomcrop(img)
img_randomcrop.show()

# Compose 流水线操作,将多个图像变换函数集成到一起,串联起来
trans_blur = transforms.GaussianBlur(kernel_size=5, sigma=(10, 10))  # 高斯模糊函数
trans_compose = transforms.Compose([trans_resize_2, trans_randomcrop, trans_totensor, trans_blur, trans_PILImage])
# 流水线操作,将多个变换串联在一起:等比缩放,PIL转tensor,高斯模糊,tensor转PIL
img_blur = trans_compose(img)
img_blur.show()

try:
    writer.close()
except NameError:
    print("writer未定义,无需关闭")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/351016
推荐阅读
相关标签
  

闽ICP备14008679号