1.主要内容
- 卷积边缘问题
- 处理边缘
- 代码演示
- 图像卷积的时候边界像素、不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当 3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。
- 在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充一个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。opencv中默认的处理方法是:BORDER_DEFAULT,此外常用的还有以下几种:
BORDER_CONSTANT————填充边缘用指定的像素
BORDER_REPLICATE————填充边缘用已知的边缘像素, 通过插值计算
BORDER_WRAP————用另一边的像素来补偿填充
copyMakeBorder(
Mat src, //输入图像
Mat dst, //添加边缘图像
int top,
int bottom,
int left,
int right,
int borderType, //边缘类型
Scalar value//只有类型是constant时,该参数才可以决定边框的颜色
)
- copeMakeBorder函数功能
扩充src的边缘,将图像变大,然后以各种外插方式自动填充图像边界,这个函数实际上调用了函数cv::borderInterpolate,这个函数最重要的功能就是为了处理边界,比如均值滤波或者中值滤波中,使用copyMakeBorder将原图稍微放大,然后我们就可以处理边界的情况了
BORDER_DEFAULT
BORDER_CONSTANT
BORDER_WRAP–另一边补偿
BORDEP_RELICATE– 通过插值计算
6.使用- 在GaussianBlur()函数中,最后一个参数就是处理边缘的类型,不过此时仅支持BORDER_REPLICATE、BORDER_DEFAULT(默认)、BPRDER_CONSTANT、不支持BORDER_WRAP