卷积操作时,边界可以填充或者不填充,如果我们需要填充呢?opencv提供了copyMakeBorder函数,可以实现边界填充功能
我们来看函数原型
CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst,
int top, int bottom, int left, int right,
int borderType, const Scalar& value = Scalar() );
nputArray src:输入图像
OutputArray dst:输出的图像
int top, int bottom, int left, int right:表示对边界每个方向添加的像素个数,就是边框的粗细程度
int borderType:表示边界的类型
value:边界的值
有下面几种类型:
borderType:扩充边缘的类型,就是外插的类型,OpenCV中给出以下几种方式
* BORDER_REPLICATE 重复: 就是对边界像素进行复制
* BORDER_REFLECT 反射:对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb 反射
* BORDER_REFLECT_101 反射101: 例子:gfedcb|abcdefgh|gfedcba
* BORDER_WRAP 外包装:cdefgh|abcdefgh|abcdefg
* BORDER_CONSTANT 常量复制:例子:iiiiii|abcdefgh|iiiiiii
const Scalar& value=Scalar():表示如果边界的类型是 BORDER_CONSTANT ,那么边界的颜色值;
用法如下:
Mat extendedImage;
copyMakeBorder(srcImage, extendedImage, kernelSize / 2, kernelSize / 2, kernelSize / 2, kernelSize / 2, 0);
namedWindow("Display Image");
imshow("Display Image",extendedImage);
参考博客: