pytorch transforms将图像padding成正方形

目前在实验一批数据,各个图像长宽不一,尝试了transforms.Resize(640),可以将短边缩放到640,长边按比例缩放。这个结果仍然会导致输入图像size不一致。如果用transforms.Resize((640,640))的话,虽然图像都变成640 X 640的正方形,但是内部物体比例却做了拉伸或缩放。我的目标是在不要改变原图中物体的长宽比例的前提下,将图像变成一个正方形。

实现代码如下:

class SquarePad:
	def __call__(self, image):
		w, h = image.size
		max_wh = np.max([w, h])
		hp = int((max_wh - w) / 2)
		vp = int((max_wh - h) / 2)
		padding = (hp, vp, hp, vp)
		return F.pad(image, padding, 0, 'constant')

# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
    'train': transforms.Compose([
        SquarePad(),
        transforms.Resize(640),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        SquarePad(),
        transforms.Resize(640),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

SquarePad可以将图像短的一边padding到与长边一致,再将该正方形做一个resize,就可以保证内部物体比例不会发生改变了。resize到多少大小,也完全可以由自己确定咯~

torchvision.transforms.v2是一个Python库,它提供了一系列的数据预处理操作,可以用于对图像数据进行处理和转换。其中一些常见的预处理操作包括: 1. transforms.CenterCrop(size):将给定的图像进行中心切割,得到给定的size大小的图像。size可以是一个tuple,表示目标图像的高度和宽度;也可以是一个整数,表示切出来的图像正方形。 2. transforms.RandomCrop(size, padding=0):随机选取图像的中心点位置进行切割。size可以是一个tuple,也可以是一个整数。 3. transforms.RandomHorizontalFlip():随机水平翻转给定的图像,概率为0.5,即有50%的概率进行翻转。 4. transforms.RandomSizedCrop(size, interpolation=2):先随机切割图像(尺寸不定),然后再将切割后的图像resize给定的size大小。 5. transforms.Pad(padding, fill=0):将给定的图像的所有边用给定的填充值进行填充。padding表示要填充多少像素,fill表示用什么值进行填充。 6. transforms.Normalize(mean, std):使用给定的均值和标准差进行归一化操作。归一化公式为:channel = (channel - mean) / std。其中mean和std分别表示每个通道的均值和标准差。 以上是torchvision.transforms.v2库中的一些常见的预处理操作,可以根据需要选择合适的操作来对图像数据进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [torchvision.transforms](https://blog.youkuaiyun.com/qq_33254870/article/details/103364028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [pytorch-nyuv2:PyTorch NYUv2数据集类](https://download.youkuaiyun.com/download/weixin_42100188/18378138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值