【数据增强】---- 使用 Pytorch 裁剪图片并保存

概述

最近需要制作一个数据集,由于数据集的数量不够,而这些数据集中的单张照片很大,因此可以通过裁剪的方式进行数据增强,从而获取到更多的数据,扩充数据集。在这个过程中还要将裁剪得到的图片保存下来。


实现方式

  1. 使用 PIL.Image.open() 获取图片;
  2. 将图片Resize(),这个不是必须,本人使用是因为原图像太大了(可能得20482048以上),而我要裁剪的是256256,这样区域太小了,因此用 Resize() 缩小图片,在不丢失重要信息的情况下,让裁剪到的图片所含的区域更大。
  3. 遍历使用 torchvision 中的 transforms.RandomCrop() 对图像进行裁剪(代码中使用了3次for循环)
  4. 将图片以给定格式的命名方式保存,一次裁剪多张的话,路径需要动态获取。

项目结构及代码

项目结构:
在这里插入图片描述
其中,lxh.png就是要裁剪的图片,crop_random.py 是代码。

代码 crop_random.py :

import PIL.Image as Image
import os
from torchvision import transforms as transforms

# pytorch提供的torchvision主要使用PIL的Image类进行处理,所以它数据增强函数大多数都是以PIL作为输入,并且以PIL作为输出。
# 读取图片
def read_PIL(image_path):
    image = Image.open(image_path)
    return image

# 获取读到图片的不带后缀的名称
def get_name(image):
    im_path = image.filename
    im_name = os.path.split(im_path)    # 将路径分解为路径中的文件名+扩展名,获取到的是一个数组格式,最后一个是文件名
    name = os.path.splitext(im_name[len(im_name) - 1])     # 获取不带扩展名的文件名,是数组的最后一个
    return name[0] # arr[0]是不带扩展名的文件名,arr[1]是扩展名

# 将图片Reszie
def resize_img(image):
    Resize = transforms.Resize(512)
    resize_img = Resize(image)
    return resize_img

# 随机裁剪
def random_crop(image):
    RandomCrop = transforms.RandomCrop(size=(256, 256))
    random_image = RandomCrop(image)
    return random_image

##################################################################################################

# 读取图片
image = read_PIL('data/lxh.png')
print(image.size)  # 输出原图像的尺寸
name = get_name(image) # 获取读到图片的不带后缀的名称

# 创建输出目录
outDir = 'data_crop/'
os.makedirs(outDir, exist_ok=True)

resie_img = resize_img(image) # 将图片Resize
print(resie_img.size)  # 输Resie后的图像的尺寸

# 随机裁剪 3 次固定大小并保存
for i in range(3):
    random_cropped_image = random_crop(resie_img)  # 随机裁剪
    random_cropped_image.show()  # 显示裁剪后的图片
    out_name = name + '_crop_' + str(i) + '.png'
    print(out_name)
    random_cropped_image.save(os.path.join(outDir, out_name))  # 按照路径保存图片

输出结果

控制台输出:

(1280, 720)
(910, 512)
lxh_crop_0.png
lxh_crop_1.png
lxh_crop_2.png

项目结构:
在这里插入图片描述
输出了裁剪后的图片,并且文件名根据for循环中的参数,实现了动态变化。


结果对比:

  • 原图像:
    在这里插入图片描述
  • 获取的裁剪后的图像:
    在这里插入图片描述

补充

pytorch 中 transforms 提供5种裁剪方式,如:



对文件夹里的所有图片批量裁剪

此处是后续对于本文的补充,请看补充的博文:

【数据增强】— 使用 Pytorch 批量裁剪文件夹里图片并保存

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁子_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值