卷积边缘问题
在做卷积处理时,图像边缘的像素不会被卷积操作。
原因在于边界像素没有完全跟卷积和重合,所以3x3像素会有1个像素的边缘没有被处理。
边缘处理方法:
在卷积开始之前增加边缘像素,填充的像素为0或者RGB黑色。这样就确保边缘被处理。OpenCV默认的是BORDER_DEFAULT,其他还有:
BORDER_CONSTANT - 填充边缘用指定像素
BORDER_REPLICATE -填充边缘像素用已知的边缘像素值
BORDER_WRAP - 用另外一边的像素来补偿填充
API说明 - 给图像添加边缘API
copyMakeBorder
代码:
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc,char ** argv) { Mat src,dst; int flag = 0; RNG rng; Scalar color; int border_type = BORDER_WRAP; src = imread("1.jpg"); namedWindow("input window",CV_WINDOW_AUTOSIZE); imshow("input window",src); int top = (int)(0.05 *src.rows); int bottom = (int)(0.05*src.rows); int left = (int)(0.05 *src.cols); int right = (int)(0.05*src.cols); while(true) { flag = waitKey(500); if((char)flag == 27){ break; } if((char)flag == 'c'){ border_type = BORDER_CONSTANT; } else if((char)flag == 'r'){ border_type = BORDER_REPLICATE; } 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("out",dst); } return 0; }
源码和原图片请到github下载:
https://github.com/MRwangmaomao/OpencvBorder-Project.git
————————————————
版权声明:本文为CSDN博主「南山二毛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16481211/article/details/79606040

