opencv canny的应用详解参见:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html
canny算法的基本步骤:
1. 获取x,y的梯度
2. 非最大值抑制
3. 边缘跟踪
第一个步骤很好理解,获取x方向、y方向的梯度。opencv中应用sobel算子来获取dx,dy。
第二个步骤有点绕口费解,说白了就是在梯度方向上求最大值,来判断此点是不是边缘点。梯度方向上是灰度变换最大的方向,只要在这条线上,比较梯度图像的中心点的邻域即可。如果梯度图像中,中心点大于两个邻域的值,则可能为边缘点,如果小于邻域的值,则为非边缘点。
有的实现采用插值的方式来获取梯度方向上中心点邻域的值,然后进行比较。而opencv,将图像中心点梯度方向近似为4个方向 0, 45, 90 及135,直接可以利用8邻域进行比较计算,不用插值的方法。。
这四个方向正好对应8邻域的横向、纵向及斜向4个方向。例如 角度 < 22.5度(PI/8) 时,横向; 角度 > 67.5度时,纵向...
1 2