前言:
此时我们对“opencv 边缘检测”可能比较关怀,小伙伴们都想要剖析一些“opencv 边缘检测”的相关文章。那么小编在网摘上搜集了一些关于“opencv 边缘检测””的相关文章,希望小伙伴们能喜欢,大家快快来了解一下吧!一、Opencv边缘检测相关的算子和滤波器
Canny算子,Sobel算子,Laplacian算子以及Scharr滤波器
二、边缘加测的一般步骤
(1)滤波
边缘检测是对图像的一阶导数和二阶导数的处理,高频噪声对其影响很大,所以需要先对图像进行滤波处理,通常采用高斯滤波
(2)增强
增强是为了将图像灰度点领域中强度值变化明显的点凸显出来,即让边缘更加明显。
可以通过梯度幅值来确定
(3)检测
通过阈值化方法,进一步删选确定哪些点属于边缘的。
canny 算子
1、有Canny1986年推出的多级边缘检测算法
2、Canny边缘检测的步骤
(1)滤波,即消除噪声
使用高斯滤波
(2)增强---计算梯度幅值和方向
使用Sobel滤波器
(3)非极大值抑制
排除非边缘像素,保留一些细线作为候选边缘
(4)滞后阈值
采用之后阈值来最终确定边缘
1)若某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。
2)若某一像素位置的幅值小于低元阈值,该像素被排除
3)若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留
3、Canny()函数
Canny(输入矩阵,输出矩阵,double threshold1,double threshold2,int apertureSize = 3,bool L2gradient = false)
threshold1和threshold2确定了滞后阈值区间,推荐两者之比在2:1~3:1之间
apertureSize确定Sobel算子的孔径大小
L2gradient计算图像赋值的标识,默认为false
使用例子:
Canny(src,dst,3,9,3)
int test17() {
Mat img = imread("C:\\Users\\86188\\Desktop\\526.jpg");
Mat img_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
imshow("img", img);
imshow("img_gray", img_gray);
Mat img_Canny;
Canny(img, img_Canny,170,250,3,false);
imshow("img_Canny", img_Canny);
waitKey(10000000);
return 0;
}
边缘检测算法较多,后续章节会持续更新新的算法
标签: #opencv 边缘检测