概述
先等比例放缩:
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:先等比例的放缩,再裁剪(判断是否需要填充)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复