首页 > 代码库 > 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方法进行边缘检测