python: cv2.resize:先等比例的放缩,再裁剪(判断是否需要填充)

先等比例放缩:

   def multi_scale_aug(self, image, label=None,
                        rand_scale=0.8, rand_crop=True):
        # cv2.imshow('original', image)
        # 等比例放缩后,输出图片尺寸size=(h,w)计算
        h, w = image.shape[:2]
        if h > w:
            long_size = np.int(h * rand_scale + 0.5)
            new_h = long_size
            new_w = np.int(w * long_size / h + 0.5)
        else:
            long_size = np.int(w * rand_scale + 0.5)
            new_w = long_size
            new_h = np.int(h * long_size / w + 0.5)
        # 双线性插值(默认设置)
        image = cv2.resize(image,dsize=(new_w, new_h),
                           interpolation=cv2.INTER_LINEAR)
        # cv2.imshow('resize', image)
        # cv2.waitKey(0)

        if label is not None:
            # 最近邻插值
            label = cv2.resize(label, (new_w, new_h),
                               interpolation=cv2.INTER_NEAREST)
        else:
            return image

        if rand_crop:
            image, label = self.rand_crop(image, label)

        return image, label

在这里插入图片描述
再裁剪(判断是否需要填充)

def rand_crop(self, image, label):
     h, w = image.shape[:2]
     # 固定值填充,由于在大小上,输入的图像大于输出图像,故用不到
     image = self.pad_image(image, h, w, self.crop_size,
                            (0.0, 0.0, 0.0))
     label = self.pad_image(label, h, w, self.crop_size,
                            (self.ignore_label,))

     new_h, new_w = label.shape
     x = random.randint(0, new_w - self.crop_size[1])
     y = random.randint(0, new_h - self.crop_size[0])
     image = image[y:y + self.crop_size[0], x:x + self.crop_size[1]]
     label = label[y:y + self.crop_size[0], x:x + self.crop_size[1]]
     return image, label

def pad_image(self, image, h, w, size, padvalue):
      pad_image = image.copy()
      pad_h = max(size[0] - h, 0)
      pad_w = max(size[1] - w, 0)
      if pad_h > 0 or pad_w > 0:
          # 选择用固定值padvalue填充,[top, bottom, left, right]
          pad_image = cv2.copyMakeBorder(image, 0, pad_h, 0,pad_w,
                                         cv2.BORDER_CONSTANT,
                                         value=padvalue)
      return pad_image

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码小白的成长

计算机网络PPT下载

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

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

打赏作者

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

抵扣说明:

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

余额充值