首页 > 代码库 > OpenCV笔记(十六)——使用Canny方法进行边缘检测

OpenCV笔记(十六)——使用Canny方法进行边缘检测

Canny方法被许多人认为是拿来做边缘检测的最佳的方法。

在维基百科上有关于Canny方法的比较详细的介绍:http://en.wikipedia.org/wiki/Canny_edge_detector

所以下面只是简单地提一下,因为暂时没有充裕的时间去阅读OpenCV实现Canny的源代码。

Canny方法大体上以四个步骤完成:

1. 利用高斯滤波器过滤噪声。

2. 利用Sobel相似的方法得到图像的强度的梯度。(Sobel算子对图像做微分)

3. 利用Non-maximum suppression方法对第2步获得的候选边缘进行处理,移除不属于边缘部分的像素,留下比较细小的边缘。

4. Hysteresis,即设定upper, lower两个阈值,高于upper的认为是边缘,低于lower的不是边缘。在upper和lower之间的,只有它们与高于upper的像素邻接,才认为是边缘。upper和lower的比例一般为2:1或者3:1。

 

在OpenCV中,Canny方法的实现由Canny函数来完成:

void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false)

参数介绍:

image应为8位单通道的图像

edges和image有相同的尺寸和类型

threshold1是上文中的lower阈值

threshold2是upper阈值

apertureSize是Sobel算子的大小,一般为3

L2gradient是一个flag,如果为false,则计算gradient时候使用1范式,即计算行微分和列微分绝对值的和,如果为true,则计算行为分和列微分的平方和的开根号。

 

OpenCV笔记(十六)——使用Canny方法进行边缘检测