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到多少大小,也完全可以由自己确定咯~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值