龙空技术网

Opencv知识点27--边缘检测

清泉视觉科技工作室 171

前言:

此时我们对“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 边缘检测