【从零学习OpenCV 4】Canny算法

小白学视觉”,选择“星标”公众号

重磅干货,第一时间送达

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

本节中最后介绍的边缘检测算法是Canny算法,该算法不容易受到噪声的影响,能够识别图像中的弱边缘和强边缘,并结合强弱边缘的位置关系,综和给出图像整体的边缘信息。Canny边缘检测算法是目前最优越的边缘检测算法之一,该方法的检测过程分为以下5个步骤:

  • Step1:使用高斯滤波平滑图像,减少图像中噪声。一般情况下使用式(5.23)所示的5×5的高斯滤波器。

  • Step2:计算图像中每个像素的梯度方向和幅值。首先通过Sobel算子分别检测图像X方向的边缘和Y方向的边缘,之后利用式(5.24)计算梯度的方向和幅值。

为了简便,梯度方向常取值0°、45°、90°和135°这个四个角度之一。

  • Step3:应用非极大值抑制算法消除边缘检测带来的杂散响应。首先将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较, 如果当前像素的梯度强度与另外两个像素梯度强度相比最大,则该像素点保留为边缘点,否则该像素点将被抑制。

  • Step4:应用双阈值法划分强边缘和弱边缘。将边缘处的梯度值与两个阈值进行比较,如果某像素的梯度幅值小于较小的阈值,则会被去除掉;如果某像素的梯度幅值大于较小阈值但小于较大阈值,则将该像素标记为弱边缘;如果某像素的梯度幅值大于较大阈值,则将该像素标记为强边缘。

  • Step5:消除孤立的弱边缘。在弱边缘的8邻域范围寻找强边缘,如果8邻域内存在强边缘,则保留该弱边缘,否则将删除弱边缘,最终输出边缘检测结果。

Canny算法具有复杂的流程,然而在OpenCV 4中提供了Canny()函数用于实现Canny算法检测图像中的边缘,极大的简化了使用Canny算法提取边缘信息的过程。Canny()函数的函数原型在代码清单5-32中给出。

代码清单5-32 Canny()函数原型1. void cv::Canny(InputArray image,2. OutputArray edges,3. double threshold1,4. double threshold2,5. int apertureSize = 3,6. bool L2gradient = false 7. )
  • image:输入图像,必须是CV_8U的单通道或者三通道图像。

  • edges:输出图像,与输入图像具有相同尺寸的单通道图像,且数据类型为CV_8U。

  • threshold1:第一个滞后阈值。

  • threshold2:第二个滞后阈值。

  • apertureSize:Sobel算子的直径。

  • L2gradient:计算图像梯度幅值方法的标志,幅值的两种计算方式如式(5.25)所示。

该函数利用Canny算法提取图像中的边缘信息。第一个参数是需要提取边缘的输入图像,目前只支持数据类型为CV_8U的图像,输入图像可以是灰度图像或者彩色图像。第二个参数是边缘检测结果的输出图像,图像是数据类型为为CV_8U的单通道灰度图像。函数第三个和第四个参数是Canny算法中用于区分强边缘和弱边缘的两个阈值,两个参数不区分较大阈值和较小阈值,函数会自动比较区分两个阈值的大小,不过一般情况下,较大阈值与较小阈值的比值在2:1到3:1之间。函数最后一个参数是计算梯度幅值方法的选择标志,无特殊需求的情况下,使用默认值即可。

为了更好的理解Canny()函数的使用方法,在代码清单5-33中给出了利用Canny()函数检测图像边缘的示例程序。程序中通过设置不同的阈值来比较阈值的大小对图像边缘检测效果的影响,程序的输出结果在图5-35给出。通过结果可以发现,较高的阈值会降低噪声信息对图像提取边缘结果的影响,但是同时也会减少结果中的边缘信息。同时程序中先对图像进行高斯模糊后再进行边缘检测,结果表明高斯模糊在边缘纹理较多的区域能减少边缘检测的结果,但是对纹理较少的区域影响较小。

代码清单5-33 myCanny.cpp利用Canny算法提取图像边缘1. #include <opencv2\opencv.hpp>2. #include <iostream>3. 4. using namespace cv;5. using namespace std;6. 7. int main()8. {9. //读取图像,黑白图像边缘检测结果较为明显10. Mat img = imread("equalLena.png", IMREAD_ANYDEPTH);11. if (img.empty())12. {13. cout << "请确认图像文件名称是否正确" << endl;14. return -1;15. }16. Mat resultHigh, resultLow, resultG;17. 18. //大阈值检测图像边缘19. Canny(img, resultHigh, 100, 200, 3);20. 21. //小阈值检测图像边缘22. Canny(img, resultLow, 20, 40, 3);23. 24. //高斯模糊后检测图像边缘25. GaussianBlur(img, resultG, Size(3, 3), 5);26. Canny(resultG, resultG, 100, 200, 3);27. 28. //显示图像29. imshow("resultHigh", resultHigh);30. imshow("resultLow", resultLow);31. imshow("resultG", resultG);32. waitKey(0);33. return 0;34. }

图5-35 myCanny.cpp程序中图像提取边缘结果

(0)

相关推荐

  • 利用边缘检测计算物体面积(内含源码)

    在农业中,通常希望获取不同土地的面积.虽然获取这些土地的面积操作相对容易,但是却涉及高额的费用.另外,如果对于不规则形状的土地,测量土地面积的大小就变得相对困难. 幸运的是,有大量以卫星图像的形式公开 ...

  • 【学术论文】基于Vivado HLS的Canny算法实时加速设计

    摘要: 针对Canny边缘检测算法在实时图像处理过程中运算耗时长.数据运算量大的缺点,研究了利用Vivado HLS实现Canny边缘检测算法的硬件加速方法.该方法由FPGA的逻辑资源生成算法对应的R ...

  • 图像特征提取(颜色,纹理,形状)

    来源:新机器视觉 来自:小白学视觉公众号 编辑:王萌(深度学习冲鸭公众号) 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 后台回复西瓜手推获得西瓜书手推笔记 后台回复CV入坑必备获得 ...

  • 一文解读经典霍夫变换(Hough Transform)

    视觉/图像重磅干货,第一时间送达 新机器视觉 最前沿的机器视觉与计算机视觉技术 206篇原创内容 公众号 来源: Hello AI World 引言 本文讲述霍夫变换的一些内容,并加入一些理解性东西, ...

  • 【学术论文】基于最小二乘法与霍夫变换的虹膜定位算法

    摘要 为解决定位虹膜内外边缘时因轮廓信息不足会出现的定位不准确或者失败问题,提出一种采用霍夫变换与最小二乘法相结合的定位算法.首先使用形态学开操作减少图像中孤立的小点,并利用自适应阈值算法二值化图像: ...

  • 图像处理知多少?准大厂算法工程师30+场秋招后总结的面经问题详解

    作者丨灯会 来源丨极市平台 编辑丨极市平台 极市导读 本篇主要包含了图像滤波.边缘检测相关常考内容等相关面试经验. >>加入极市CV技术交流群,走在计算机视觉的最前沿 系列文章: 深度学习 ...

  • 二值化处理与边缘检测

    问题:我在提取图像边缘的时候,首先对图像进行灰度变换,之后进行二值处理,最后进行边缘检测得到边缘图像. 但是在查阅资料的过程中我经常发现很多人忽略二值化的步骤,直接进行边缘检测:还有很多人在实现某些功 ...

  • 【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】深度神经网络应用实例

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像修复

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——Grabcut图像分割

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——分水岭法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】QR二维码检测

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像矩的计算与应用

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】轮廓外接多边形

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】轮廓发现与绘制

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...