OpenCV copyMakeBorder():图像添加边框(附带实例)
在 OpenCV 中,可以使用函数 copyMakeBorder() 为图像设置边界。该函数可以为图像定义额外的填充(边框),原始边缘的行或列被复制成额外的边框中。
copyMakeBorder() 函数声明如下:
参数 value 默认值为 0,当borderType 取值为 BORDER_CONSTANT 时,这个参数表示边界值。dst 表示输出图像,和原图像有一样的深度,大小为 Size(src.cols + left +right, src.rows + top+ bottom)。
【实例】为图像加上边框。
运行工程,结果如下图所示:
copyMakeBorder() 函数声明如下:
cv.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]]) -> dst各个参数的含义如下:
- src 表示输入图像,即原图像;
- top、bottom、left、right 分别表示在原图像的 4 个方向上扩充多少像素;
-
borderType 表示边界类型,取值如下:
-
BORDER_REPLICATE:复制法,复制最边缘像素,填充扩充的边界,如下图所示。中值滤波就采用这种方法。
-
BORDER_REFLECT_101:对称法,以最边缘像素为轴,对称填充,如下图所示。这是高斯滤波边界处理的默认方法。
-
BORDER_CONSTANT:常量法,以一个常量像素值(参数value)填充扩充的边界,如下图所示。这种方式在仿射变换、透视变换中非常常见。
- BORDER_REFLECT:和对称法原理一致,不过最边缘像素也要对称过去。
- BORDER_WRAP:用另一侧元素来填充这一侧的扩充边界。
-
BORDER_REPLICATE:复制法,复制最边缘像素,填充扩充的边界,如下图所示。中值滤波就采用这种方法。
参数 value 默认值为 0,当borderType 取值为 BORDER_CONSTANT 时,这个参数表示边界值。dst 表示输出图像,和原图像有一样的深度,大小为 Size(src.cols + left +right, src.rows + top+ bottom)。
【实例】为图像加上边框。
import cv2 import numpy as np img = cv2.imread('test.jpg') #img = cv2.resize(img,(256,256)) cv2.imshow('origin',img),cv2.waitKey(0),cv2.destroyAllWindows() replicate = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REPLICATE) cv2.imshow('replicate',replicate),cv2.waitKey(0),cv2.destroyAllWindows() constant = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_CONSTANT, value=(255,0,255)) cv2.imshow('constant',constant),cv2.waitKey(0),cv2.destroyAllWindows() reflect = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT) cv2.imshow('reflect',reflect),cv2.waitKey(0),cv2.destroyAllWindows() reflect101 = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT_101) cv2.imshow('reflect101',reflect101),cv2.waitKey(0),cv2.destroyAllWindows() wrap = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_WRAP) cv2.imshow('wrap',wrap),cv2.waitKey(0),cv2.destroyAllWindows()在上述代码中,多次调用了 copyMakeBorder() 函数,主要区别是参数 borderType 的值不同(边框效果不同)。
运行工程,结果如下图所示:
