目标

在本章中,我们将学习

  • Canny边缘检测的概念
  • OpenCV函数: cv.Canny()

理论

Canny Edge Detection是一种流行的边缘检测算法。它由John F. Canny发明

这是一个多阶段算法,我们将经历每个阶段。

降噪

由于边缘检测容易受到图像中噪声的影响,因此第一步是使用5x5高斯滤波器消除图像中的噪声。我们已经在前面的章节中看到了这一点。

查找图像的强度梯度

然后使用Sobel核在水平和垂直方向上对平滑的图像进行滤波,以在水平方向(Gx)和垂直方向(Gy)上获得一阶导数。从这两张图片中,我们可以找到每个像素的边缘渐变和方向,如下所示:

渐变方向始终垂直于边缘。将其舍入为代表垂直,水平和两个对角线方向的四个角度之一。

非极大值抑制
在获得梯度大小和方向后,将对图像进行全面扫描,以去除可能不构成边缘的所有不需要的像素。为此,在每个像素处,检查像素是否是其在梯度方向上附近的局部最大值。查看下面的图片:

点A在边缘(垂直方向)上。渐变方向垂直于边缘。点B和C在梯度方向上。因此,将A点与B点和C点进行检查,看是否形成局部最大值。如果是这样,则考虑将其用于下一阶段,否则将其抑制(置为零)。 简而言之,你得到的结果是带有“细边”的二进制图像。

磁滞阈值

该阶段确定哪些边缘全部是真正的边缘,哪些不是。为此,我们需要两个阈值minVal和maxVal。强度梯度大于maxVal的任何边缘必定是边缘,而小于minVal的那些边缘必定是非边缘,因此将其丢弃。介于这两个阈值之间的对象根据其连通性被分类为边缘或非边缘。如果将它们连接到“边缘”像素,则将它们视为边缘的一部分。否则,它们也将被丢弃。见下图:

边缘A在maxVal之上,因此被视为“确定边缘”。尽管边C低于maxVal,但它连接到边A,因此也被视为有效边,我们得到了完整的曲线。但是边缘B尽管在minVal之上并且与边缘C处于同一区域,但是它没有连接到任何“确保边缘”,因此被丢弃。因此,非常重要的一点是我们必须相应地选择minVal和maxVal以获得正确的结果。

在边缘为长线的假设下,该阶段还消除了小像素噪声。

因此,我们最终得到的是图像中的强边缘。

OpenCV中的Canny Edge检测

OpenCV将以上所有内容放在单个函数cv.Canny()中。我们将看到如何使用它。第一个参数是我们的输入图像。第二个和第三个参数分别是我们的minVal和maxVal。第三个参数是perture_size。它是用于查找图像渐变的Sobel内核的大小。默认情况下为3。最后一个参数是L2gradient,它指定用于查找梯度幅度的方程式。如果为True,则使用上面提到的更精确的公式,否则使用以下函数:$Edge_Gradient ; (G) = |Gx| + |Gy|$。默认情况下,它为False。

import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)edges = cv.Canny(img,100,200)plt.subplot(121),plt.imshow(img,cmap = 'gray')plt.title('Original Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(edges,cmap = 'gray')plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()

附加资源

  1. Canny edge detector at Wikipedia:http://en.wikipedia.org/wiki/Cannyedgedetector
  2. Canny Edge Detection Tutorial:http://dasl.unlv.edu/daslDrexel/alumni/bGreen/www.pages.drexel.edu/weg22/cantut.html by Bill Green, 2002.

练习

  1. 编写一个小应用程序以找到Canny边缘检测,该检测的阈值可以使用两个跟踪栏进行更改。这样,您可以了解阈值的影响。

canny边缘检测算法 opencv_OpenCV-Python Canny边缘检测 | 十九相关推荐

  1. 经典算法题每日演练——第十九题 双端队列

    经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...

  2. 关键词数量统计python_利用python统计《十九大报告》中的关键词和词频

    利用python统计<十九大报告>中的关键词.报告摘要和词频.引用snowNLP.得到的结果: 1.关键词: 前五个关键词为 ['发展', '人民', '中国', '党', '建设'] 2 ...

  3. [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. [Python人工智能] 二十九.什么是生成对抗网络GAN?基础原理和代码普及(1)

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CN ...

  5. [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. [Python图像处理] 三十九.Python图像分类万字详解(贝叶斯图像分类、KNN图像分类、DNN图像分类)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  7. python VTK(十九) ----图形基本操作 法向量计算

    #!/usr/bin/env python # -*- coding:utf-8 -*- import vtkreader = vtk.vtkPolyDataReader() reader.SetFi ...

  8. 算法导论读书笔记-第十九章-斐波那契堆

    算法导论第19章--斐波那契堆 可合并(最小)堆(mergeable min-heap) : 支持以下5种操作的一种数据结构, 其中每一个元素都有一个关键字: MAKE-HEAP(): 创建和返回一个 ...

  9. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  10. 零基础学Python(第十九章 File操作·IO流补充章节)

    本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...

最新文章

  1. 解决 ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
  2. poj2553(强连通分量)
  3. Linux /etc/group文件解析(超详细)
  4. DDD理论学习系列(3)-- 限界上下文
  5. mysql一秒查询次数_单个select语句实现MySQL查询统计次数
  6. 环信 之 注册及创建应用
  7. 我决定把IDEA神器这些你可能不知道的但是又实用的小技巧分享出来,超赞!
  8. 3dmax高级建模方法总结
  9. oracle中imp命令详解,Oracle使用imp命令导入数据详解
  10. 移动光猫怎么设置虚拟服务器设置,移动光纤猫如何设置,怎样连接和设置光猫和路由器...
  11. WinXP虚拟机安装softICE
  12. 此 Google 帐号尚未与设备关联。要安装应用,请先访问设备上的 Play 商店应用。 了解详情
  13. (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)
  14. 科技兴关,荣联与天津海关共建基因组数据库及分析平台
  15. js中对特殊字符进行转义
  16. 50道JAVA基础算法编程题【内含分析、程序答案】【建议收藏】【建议收藏】【建议收藏】
  17. 新电脑改win7系统如何调整bois的方法总结
  18. 项目1之分层随机分组
  19. centos7.2 kvm虚拟化管理平台WebVirtMgr部署
  20. 【转】 实时Android语音对讲系统架构

热门文章

  1. 嫦娥五号完美落月,背后黑科技令人惊叹
  2. 通电就可以工作,这些单片机真香!
  3. JAVA实验二——圆柱体
  4. mysql alert table 日志_MySQL日志
  5. 基于计算机的控制系统,基于计算机的机械控制系统实现方式研究.pdf
  6. php round half even,PHP round( )用法及代碼示例
  7. oneinstack_OneinStack lnmp网站环境部署Namecheap SSL安全证书方法
  8. java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
  9. selenium切换窗口 java_WebDriver(Selenium2) 根据新窗口title切换窗口
  10. sql根据类别拆分上下级_运用SQL对黑五销售数据进行分析