opencv批量填充图像边缘

opencv批量填充图像边缘

在图像处理时,有时候会遇到需要对图像边缘进行填充以符合需求的形状,使用cv2.copyMakeBorder函数将图像边缘填充为矩形
思路:

  1. 首先获取图像的高度h和宽度w
  2. 计算h和w的差值,并分为h较大和w较大两种情况(这里默认填充后的图像为矩形,并设置h、w较大的一方填充值为400)
  3. cal为h和w差值的一半
  4. 对图像边缘进行填充

具体实现:

import math
import os
import cv2


# 用白色(255, 255, 255)填充图像边缘,并重设图像大小
def pad_and_resize_picture(path):
    img_path = path
    files = os.listdir(path)
    # 对文件进行排序。若无此步骤,可能会导致图像对应错误
    files.sort()
    
    for bmpFile in files:
            h, w, n = img.shape
            if h > w:
            	# cal 为 h 和 w 插值的 1/2
                cal = (h + 800 - w) / 2
                # math.ceil函数将cal从浮点数变成整数,并且会取整
                cal = math.ceil(cal)
                # cv2.copyMakeBorder参数依次为:图像,顶部新增边框宽度,底部新增边框宽度,左侧新增边框宽度,右侧新增边框宽度,边界类型,插值
                img_modify = cv2.copyMakeBorder(img, 400, 400, cal, cal, cv2.BORDER_CONSTANT, value=[255, 255, 255])
            else:
                cal = (w + 800 - h) / 2
                cal = math.ceil(cal)
                img_modify = cv2.copyMakeBorder(img, cal, cal, 400, 400, cv2.BORDER_CONSTANT, value=[255, 255, 255])
			# 将填充后的图像resize为900 * 900
            new_img = cv2.resize(img_modify, (900, 900))
            # 将新图像写入路径,覆盖原图像
            cv2.imwrite((img_path + str(bmpFile)), new_img)
    print("Pad and resize picture finished")

你可能感兴趣的:(opencv,计算机视觉,python)