卷积边缘问题

图像卷积的时候,边界像素不能被卷积操作,因为边界像素没有完全跟kernel重合,例如3×3的kernel有1个大小的像素边缘未被处理,5×5的kernel有2个大小的像素边缘未被处理,

处理方法

OpenCV-处理边缘
增加边缘对API
OpenCV-处理边缘
代码如下:

#include<opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui_c.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat src, rdst_x, rdst_y, sdst_x, sdst_y, dst, dst_my;
	src = imread("E://VS-pro//images//zhu.jpg");
	imshow("原图", src);

	int top = (int)(0.05 * src.cols);
	int bottom = top;
	int left = (int)(0.05 * src.rows);
	int right = left;
	RNG rng(12345);
	int border_type = BORDER_DEFAULT;

	int c = 0;
	while (true)
	{
		c = waitKey(500);
		//ESC
		if ((char)c == 27) break;
		if ((char)c == 'r')//填充边缘用已知的边缘像素
		{
			border_type = BORDER_REFLECT;
		}
		else if ((char)c == 'w')//填充边缘用另一边的边缘像素
		{
			border_type = BORDER_WRAP;
		}
		else if ((char)c == 'c') //填充边缘用指定像素
		{
			border_type = BORDER_CONSTANT;
		}

		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		copyMakeBorder(src, dst, top, bottom, left, right, border_type, color);
		imshow("加边缘之后", dst);
	}
	Scalar 


	waitKey(0);
	return 0;
}

分别为按下 “c” “w” “r” 原图
OpenCV-处理边缘OpenCV-处理边缘OpenCV-处理边缘OpenCV-处理边缘

相关文章: