在OpenCV的图像处理中,边界填充主要用于在图像边缘添加额外的像素。这项技术在多种图像处理任务中都有重要的应用,包括但不限于卷积操作、图像缩放、形态学操作等。
opencv中边界填充的主要方法为copyMakeBorder,其函数原型如下:
cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]]) → dst
参数说明
-
src
:输入图像。 -
top
:在图像顶部添加的边界宽度。 -
bottom
:在图像底部添加的边界宽度。 -
left
:在图像左侧添加的边界宽度。 -
right
:在图像右侧添加的边界宽度。 -
borderType
:边界类型,常见的有:
-
cv2.BORDER_CONSTANT
:常数填充(用一个固定的值填充边界)。 -
cv2.BORDER_REFLECT
:反射填充(镜像边缘像素)。 -
cv2.BORDER_REFLECT_101
或cv2.BORDER_DEFAULT
:反射填充,但不包括最边缘的像素。 -
cv2.BORDER_REPLICATE
:复制边缘像素。 -
cv2.BORDER_WRAP
:循环填充(将图像的另一端的像素值复制到边界处)。
-
-
dst
(可选):输出图像,如果未指定,则自动创建。 -
value
(可选):当borderType
为cv2.BORDER_CONSTANT
时,用于指定填充的常数值,默认是黑色(0, 0, 0)。
img = cv2.imread("cat.jpg")
# 填充大小
top_size,bottom_size,left_size,right_size = (50,50,50,50)
# 五种不同的填充方式
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_CONSTANT,value = 0)
# 导入matplotlib更方便使用子图展示
import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img),plt.title('RORGINAL')
plt.subplot(232),plt.imshow(replicate),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect),plt.title('REFELECT')
plt.subplot(234),plt.imshow(reflect101),plt.title('REFELECT_101')
plt.subplot(235),plt.imshow(wrap),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant),plt.title('CONSTANT')
大概观察一下填充的边界结果就能够理解每种填充方法是怎么样的原理: