四、tensorforms 常用 类 方法 的 使用(ToTensor、Normalize、Resize、Compose、RandomCrop)


首先明确一下常用的图片读取方式,以及读取后output的格式

格式使用到的库读取方式
PILfrom PIL import ImageImage.open()
ndarrayopencv-pythoncv.imread()
tensorfrom torchvision import transformstransforms.ToTensor()

引入要用的模块

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

writer = SummaryWriter('log')

image_path = 'hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg'

读取PIL图片

PIL格式的图片可以理解为图片的基准类型,在此类型上进行各种的格式转换

img = Image.open(image_path)
print(type(img))
print(img)

transforms.ToTensor

PIL Image 或者 numpy.ndarray 类型的图片格式转换为 tensor格式

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(type(trans_totensor))

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

transforms.Normalize

根据传入的meanstandardtensor格式的图片做归一化处理。只支持tensor格式,不支持PIL格式
处理公式:output[channel] = (input[channel] - mean[channel]) / std[channel]

# Normalize
trans_normal = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_normal = trans_normal(img_tensor)

writer.add_image('Normal', img_normal)
writer.close()

transforms.Resize

PIL 或者 Tensor类型图片重新调正大小,可以接受sequence或者int两种类型的参数。
sequence:(H, W)。高H,宽W
int: int。当参数为int时,会将图片W/H中较小边缘将会按int进行调整

# transforms.Resize
print(img.size)
trans_resize = transforms.Resize((100, 512))
img_resize = trans_resize(img)  # pil
img_resize = trans_totensor(img_resize)  # tensor
print(img_resize)

writer.add_image('Resize', img_resize)
writer.close()

transforms.Compose

将transfroms中的各种图像操作串行结合,但是要注意,前一个变换的output的数据类型必须与后一个变换的input的数据类型相匹配

# Compose
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])  # 先进行resize,在进行totensor
img_resize_2 = trans_compose(img)
print(type(img_resize_2))

writer.add_image('RandomCrop', img_resize_2)
writer.close()

transforms.RandomCrop

PIL 或者 Tensor类型图片进行随机裁剪,可以接受sequence或者int两种类型的参数
sequence:(H, W)。高H,宽W
int: int。当参数为int时,将会进行int*int的裁剪

# RandomCrop
trans_random_crop = transforms.RandomCrop(400)
trans_compose_2 = transforms.Compose([trans_random_crop, trans_totensor])
img_crop = trans_compose_2(img)

writer.add_image('RandomCrop', img_crop)
writer.close()

查看绘制的图像

在conda的pytorch环境中执行 tensorboard --logdir=log --port=6007
在这里插入图片描述
点击本地连接,即可查看,不再一一进行展示
在这里插入图片描述

完整代码

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

writer = SummaryWriter('log')

image_path = 'hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg'

img = Image.open(image_path)
print(type(img))
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(type(trans_totensor))

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

# Normalize
trans_normal = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_normal = trans_normal(img_tensor)
writer.add_image('Normal', img_normal)
writer.close()

# Resize
print(img.size)
trans_resize = transforms.Resize((100, 512))
img_resize = trans_resize(img)  # PIL
img_resize = trans_totensor(img_resize)  # tensor
print(img_resize)

writer.add_image('Resize', img_resize)
writer.close()

# Compose 将transfroms中的各种图像操作串行结合,但是要注意,前一个变换的output的数据类型必须与后一个变换的input的数据类型相匹配
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
print(type(img_resize_2))

writer.add_image('RandomCrop', img_resize_2)
writer.close()

# RandomCrop
trans_random_crop = transforms.RandomCrop(400)
trans_compose_2 = transforms.Compose([trans_random_crop, trans_totensor])
img_crop = trans_compose_2(img)

writer.add_image('RandomCrop', img_crop)
writer.close()

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值