对图片进行裁减预处理

Dataloader数据读取之前,需要对图片进行处理,这里展示了两种在Dataset中对图片随机裁减的方法

首先我们有一批数据,我们需要对数据进行预处理,假设图片的大小是随机的,对于大于(3, 256, 256)的图片,我们对他进行随机的裁减,变为(3, 256, 256),对于小于(3, 256, 256)的图片,我们将其进行填充,最后我们将图片进行保存(注意在模型训练过程中是没有这一步的,这里只是为了方便演示结果)

预处理的过程一般在Dataset__getitem__()函数中进行修改

第一种

PIL的Image库进行裁减

from PIL import Image
import random

im = Image.open("12300.jpg")
# 图片的宽度和高度
ww, hh = im.size
print("图片宽度和高度分别是", ww, hh)

# 元组里的元素分别是:
# 距离图片左边界距离x, 距离图片上边界距离y
# 距离图片左边界距离+裁剪框宽度x+w,距离图片上边界距离+裁剪框高度y+h
# 截取图片中一块宽是256和高是256的
patch_size = 256
www     = random.randint(0, ww-patch_size)
hhh     = random.randint(0, hh-patch_size)

# crop
x = www
y = hhh
w = 256
h = 256
region = im.crop((x, y, x+w, y+h))
region.save("./12300restore.jpg")

第二种

读取为tensor后进行裁减
Image.open得到的图像经过torchvision.transforms.functional.to_tensor后为(c, h, w)类型

import torch
import random
from PIL import Image
import torchvision.transforms.functional as TF
from torchvision import utils as vutils

def save_image_tensor(input_tensor: torch.Tensor, filename):
    """
    将tensor保存为图片
    :param input_tensor: 要保存的tensor
    :param filename: 保存的文件名
    """
    # assert (len(input_tensor.shape) == 4 and input_tensor.shape[0] == 1)
    # 复制一份
    input_tensor = input_tensor.clone().detach()
    # 到cpu
    input_tensor = input_tensor.to(torch.device('cpu'))
    # 反归一化
    # input_tensor = unnormalize(input_tensor)
    vutils.save_image(input_tensor, filename)


im = Image.open("12300.jpg")
# 图片的宽度和高度
ww, hh = im.size
print("图片宽度和高度分别是", ww, hh)

# 转化为tensor形式
patch_size = 256
im = TF.to_tensor(im)

# 随机crop
hhh     = random.randint(0, hh-patch_size)
www     = random.randint(0, ww-patch_size)
im = im[:, hhh:hhh+patch_size, www:www+patch_size]

save_image_tensor(im, "./aaaaa.jpg")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值