我是靠谱客的博主 友好铃铛,最近开发中收集的这篇文章主要介绍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

在这里插入图片描述

最后

以上就是友好铃铛为你收集整理的python: cv2.resize:先等比例的放缩,再裁剪(判断是否需要填充)的全部内容,希望文章能够帮你解决python: cv2.resize:先等比例的放缩,再裁剪(判断是否需要填充)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部