canny边缘检测算法 opencv_OpenCV-Python Canny边缘检测 | 十九
目标
在本章中,我们将学习
- 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()
附加资源
- Canny edge detector at Wikipedia:http://en.wikipedia.org/wiki/Cannyedgedetector
- Canny Edge Detection Tutorial:http://dasl.unlv.edu/daslDrexel/alumni/bGreen/www.pages.drexel.edu/weg22/cantut.html by Bill Green, 2002.
练习
- 编写一个小应用程序以找到Canny边缘检测,该检测的阈值可以使用两个跟踪栏进行更改。这样,您可以了解阈值的影响。
canny边缘检测算法 opencv_OpenCV-Python Canny边缘检测 | 十九相关推荐
- 经典算法题每日演练——第十九题 双端队列
经典算法题每日演练--第十九题 双端队列 原文:经典算法题每日演练--第十九题 双端队列 话说大学的时候老师说妹子比工作重要~,工作可以再换,妹子这个...所以...这两个月也就一直忙着Fall in ...
- 关键词数量统计python_利用python统计《十九大报告》中的关键词和词频
利用python统计<十九大报告>中的关键词.报告摘要和词频.引用snowNLP.得到的结果: 1.关键词: 前五个关键词为 ['发展', '人民', '中国', '党', '建设'] 2 ...
- [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python人工智能] 二十九.什么是生成对抗网络GAN?基础原理和代码普及(1)
从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CN ...
- [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python图像处理] 三十九.Python图像分类万字详解(贝叶斯图像分类、KNN图像分类、DNN图像分类)
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- python VTK(十九) ----图形基本操作 法向量计算
#!/usr/bin/env python # -*- coding:utf-8 -*- import vtkreader = vtk.vtkPolyDataReader() reader.SetFi ...
- 算法导论读书笔记-第十九章-斐波那契堆
算法导论第19章--斐波那契堆 可合并(最小)堆(mergeable min-heap) : 支持以下5种操作的一种数据结构, 其中每一个元素都有一个关键字: MAKE-HEAP(): 创建和返回一个 ...
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- 零基础学Python(第十九章 File操作·IO流补充章节)
本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...
最新文章
- 解决 ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
- poj2553(强连通分量)
- Linux /etc/group文件解析(超详细)
- DDD理论学习系列(3)-- 限界上下文
- mysql一秒查询次数_单个select语句实现MySQL查询统计次数
- 环信 之 注册及创建应用
- 我决定把IDEA神器这些你可能不知道的但是又实用的小技巧分享出来,超赞!
- 3dmax高级建模方法总结
- oracle中imp命令详解,Oracle使用imp命令导入数据详解
- 移动光猫怎么设置虚拟服务器设置,移动光纤猫如何设置,怎样连接和设置光猫和路由器...
- WinXP虚拟机安装softICE
- 此 Google 帐号尚未与设备关联。要安装应用,请先访问设备上的 Play 商店应用。 了解详情
- (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)
- 科技兴关,荣联与天津海关共建基因组数据库及分析平台
- js中对特殊字符进行转义
- 50道JAVA基础算法编程题【内含分析、程序答案】【建议收藏】【建议收藏】【建议收藏】
- 新电脑改win7系统如何调整bois的方法总结
- 项目1之分层随机分组
- centos7.2 kvm虚拟化管理平台WebVirtMgr部署
- 【转】 实时Android语音对讲系统架构
热门文章
- 嫦娥五号完美落月,背后黑科技令人惊叹
- 通电就可以工作,这些单片机真香!
- JAVA实验二——圆柱体
- mysql alert table 日志_MySQL日志
- 基于计算机的控制系统,基于计算机的机械控制系统实现方式研究.pdf
- php round half even,PHP round( )用法及代碼示例
- oneinstack_OneinStack lnmp网站环境部署Namecheap SSL安全证书方法
- java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
- selenium切换窗口 java_WebDriver(Selenium2) 根据新窗口title切换窗口
- sql根据类别拆分上下级_运用SQL对黑五销售数据进行分析