1. C/C++

OpenCV-第十四话-处理边缘

一.写在前面

图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3×3滤波时候有1个像素的边缘没有被处理,5×5滤波的时候有2个像素的边缘没有被处理。

在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3×3在

四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之

后再去掉这些边缘。openCV中默认的处理方法是: BORDER_DEFAULT,此外

常用的还有如下几种:

BORDER_CONSTANT – 填充边缘用指定像素值

BORDER_REPLICATE 填充边缘像素用已知的边缘像素值

 – BORDER_WRAP – 用另外一边的像素来补偿填充

二.对应API

lcopyMakeBorder(

– Mat src, // 输入图像

– Mat dst, // 添加边缘图像

– int top, // 边缘长度,一般上下左右都取相同值,

– int bottom,

– int left,

– int right,

– int borderType // 边缘类型

– Scalar value

三.代码实现

/*
OpenCV 处理边缘学习
Michael Jiang<sencom1997@outlook.com>
2019年7月26日06:07:12
*/

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main()
{
	Mat src, dst;

	//读取图像
	src = imread("D:/linus.jpg", IMREAD_COLOR);
	

	//判断读取是否成功
	if (src.empty()) {
		printf("pic load failed!\n");
		return -1;
	}
	imshow("src", src);

	//高斯模糊采用默认边界处理方式
	GaussianBlur(src, dst, Size(5, 5), -1, (0, 0), BORDER_DEFAULT);
	imshow("dst", dst);

	waitKey(0);
	return 0;
}