opencv批量填充图像边缘
在图像处理时,有时候会遇到需要对图像边缘进行填充以符合需求的形状,使用cv2.copyMakeBorder函数将图像边缘填充为矩形
思路:
- 首先获取图像的高度h和宽度w
- 计算h和w的差值,并分为h较大和w较大两种情况(这里默认填充后的图像为矩形,并设置h、w较大的一方填充值为400)
- cal为h和w差值的一半
- 对图像边缘进行填充
具体实现:
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:
img = cv2.imread(bmpFile)
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库批量处理图像,通过对图像边缘进行填充以达到矩形形状,并进行大小调整。具体方法是利用cv2.copyMakeBorder函数,根据图像的长宽比计算填充值,确保填充后为矩形,然后将图像resize到900x900像素。整个过程适用于图像预处理,保持图像统一尺寸。

333

被折叠的 条评论
为什么被折叠?



