iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python OpenCV Canny边缘检测算法如何实现
  • 239
分享到

Python OpenCV Canny边缘检测算法如何实现

2023-07-02 19:07:55 239人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“python OpenCV Canny边缘检测算法如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python OpenCV Canny边缘检测算法如何实现”文章能帮助

本文小编为大家详细介绍“python OpenCV Canny边缘检测算法如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python OpenCV Canny边缘检测算法如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Gaussian smoothing

总的来说,Canny边缘检测可以分为四个步骤:

由于边缘检测对噪声敏感,因此对图像应用高斯平滑以帮助减少噪声。
具体做法是,采用一个5*5的高斯平滑滤波器对图像进行滤波处理。

Computing the gradient magnitude and orientation

对平滑后的图像,在水平、垂直两个方向上使用Sobel算子(如下图)计算梯度大小,得到两个方向上的一阶导数Gx与Gy。

Python OpenCV Canny边缘检测算法如何实现

在得到两个方向上的梯度之后,对这两个向量求和,得到这一点处的梯度大小与方向。

Python OpenCV Canny边缘检测算法如何实现

采用四舍五入,将梯度方向确定为上下左右与四个对角线方向之一(45°的倍数)。

Non-maxima suppression

在得到梯度大小与方向之后,对图像进一步扫描,去除不构成边缘的不重要的像素信息,这里采用的方法是非极大值抑制——在每个像素处,检查像素是否在其梯度方向的邻域中是局部最大值,只保留局部最大值的梯度。

Python OpenCV Canny边缘检测算法如何实现

在上图中,点A位于边缘上。梯度方向与边缘方向垂直。为了确定要不要保留A点作为边缘,需要将A点处的梯度大小与B、C两点的梯度大小比较,如果A点的梯度大小不是局部最大,则将该点抑制。

因此,从结果上讲,NMS其实是将B、C两点抑制了,它们不会出现在结果中,因此这一步的效果是“thin edges”。

Hysteresis thresholding

定义上界与下界两个阈值,并规定:

  • 任何梯度强度大于上界的像素都是边;

  • 任何梯度强度小于下界的像素都不是边;

  • 任何梯度介于两个阈值之间的可能是边,此时考察它们的连通性,如果它们和第一种情况(确定是边缘的像素)相连接,就认为它们是边缘,否则认为它们不是边缘。

Python OpenCV Canny边缘检测算法如何实现

在上图中,A点在maxVal阈值之上,确定是边缘。C介于两个阈值之间,但与A相连,因此它也是边缘。B介于两个阈值之间,它所在的曲线上并没有任何像素点的梯度强度在maxVal之上,因此它不是边缘。

需要指出的是,上面四步操作之后得到的是strong edges。

OpenCV实现

OpenCV提供了cv.Canny()方法,该方法将输入的原始图像转换为边缘图像。

该方法的原型为:

cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edgescv.Canny(dx, dy, threshold1, threshold2[, edges[, L2gradient]]) -> edges

image参数是array格式的输入图像。threshold1与threshold2分别是我们的下界阈值与上界阈值。apertureSize是用于查找图像梯度的Sobel核的大小,默认为3。L2gradient指定了求梯度幅值的公式,是一个布尔型变量,默认为False。当它为True时,使用L2,否则使用L1。

下面是具体代码:

def canny_detect(image_path, show=True):    # 读取图像    image = cv2.imread(image_path, 0)    # 获取结果    edges = cv2.Canny(image, 100, 200)    if show:        # 绘制原图        plt.subplot(121)        plt.imshow(image, 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()    return edgescanny_detect('images/2.jpeg')

效果:

Python OpenCV Canny边缘检测算法如何实现

Python OpenCV Canny边缘检测算法如何实现

读到这里,这篇“Python OpenCV Canny边缘检测算法如何实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: Python OpenCV Canny边缘检测算法如何实现

本文链接: https://www.lsjlt.com/news/343789.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python OpenCV Canny边缘检测算法如何实现
    本文小编为大家详细介绍“Python OpenCV Canny边缘检测算法如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python OpenCV Canny边缘检测算法如何实现”文章能帮助...
    99+
    2023-07-02
  • Python实现Opencv cv2.Canny()边缘检测
    目录1. 效果图2. 源码补充:OpenCV-Python 中 Canny() 参数这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测; Ca...
    99+
    2022-11-12
  • opencv canny边缘检测算法详解
    目录一、边缘检测原理二、 canny算法原理三、opencv 函数支持Canny()四、代码示例:一、边缘检测原理 图像的边缘由图像中两个相邻的区域之间的像素集合组成,是指图像中一个...
    99+
    2022-11-13
  • python中opencv Canny边缘检测
    目录Canny边缘检测Canny边缘检测基础高斯滤波去除图像噪声计算梯度非极大值抑制应用双阈值确定边缘Canny函数及使用Canny边缘检测 Canny边缘检测是一种使用多级边缘检测...
    99+
    2022-11-11
  • OpenCV中Canny边缘检测的实现
    目录1. Canny 边缘检测理论1.1、高斯滤波1.2、Sobel算子计算梯度和方向1.3、非极大值抑制(定位准确的边缘同时可缩小边缘线宽)1.4、双阈值检测2. OpenCV 之...
    99+
    2022-11-12
  • Python OpenCV Canny边缘检测算法的原理实现详解
    目录Gaussian smoothingComputing the gradient magnitude and orientationNon-maxima suppressionH...
    99+
    2022-11-11
  • Python中怎么实现Opencv cv2.Canny()边缘检测
    这期内容当中小编将会给大家带来有关Python中怎么实现Opencv cv2.Canny()边缘检测,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 效果图原始图 VS Canny检测效果图如下:2. ...
    99+
    2023-06-20
  • 使用OpenCV怎么实现Canny边缘检测
    今天就跟大家聊聊有关使用OpenCV怎么实现Canny边缘检测,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. Canny 边缘检测理论Canny 是一种常用的边缘检测算法. 其是...
    99+
    2023-06-20
  • Python利用Canny算法检测硬币边缘
    目录一、问题背景二、Canny 算法(一)、高斯平滑(二)Sobel算子计算梯度(三)非极大化抑制(四)滞后边缘跟踪一、问题背景 纸面上有一枚一元钱的银币,你能在 Canny 和 H...
    99+
    2022-11-13
  • Python OpenCV实现边缘检测
    本文实例为大家分享了Python OpenCV实现边缘检测的具体代码,供大家参考,具体内容如下 1. Sobel 算子检测 Sobel 算子是高斯平滑和微分运算的组合,抗噪能力很强,用途也很多,尤其是效率要求高但对细...
    99+
    2022-06-02
    python OpenCV 边缘检测
  • Python怎么利用Canny算法检测硬币边缘
    这篇文章给大家分享的是有关Python怎么利用Canny算法检测硬币边缘的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、问题背景纸面上有一枚一元钱的银币,你能在 Canny 和 Hough 的帮助下找到它的坐标...
    99+
    2023-06-28
  • python实现ROA算子边缘检测算法
    python实现ROA算子边缘检测算法的具体代码,供大家参考,具体内容如下 代码 import numpy as np import cv2 as cv def ROA(im...
    99+
    2022-11-12
  • Python+OpenCV实现边缘检测与角点检测详解
    目录一、边缘检测1.1、读取图像1.2、图像转换成灰度图像1.3、Sobel算子1.4、Canny算子1.5、显示正常中文的标签1.6、边缘检测结果二、角点检测2.1、读取图像2.2...
    99+
    2023-02-03
    Python OpenCV边缘检测 Python OpenCV角点检测 Python OpenCV 检测
  • Python+OpenCV图像边缘检测四种实现方法
    目录1.Sobel算子2.Schaar算子(更能体现细节)3.Laplacian算子(基于零穿越的,二阶导数的0值点)4.Canny边缘检测(被认为是最优的边缘检测算法)总结 im...
    99+
    2022-11-12
  • Python中图像边缘检测算法如何实现
    这篇“Python中图像边缘检测算法如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中图像边缘检测算法如何...
    99+
    2023-06-30
  • Python如何使用cv2.canny进行图像边缘检测
    目录使用cv2.canny进行图像边缘检测阈值对检测结果的影响sobel算子对检测结果的影响范数对检测结果的影响总结使用cv2.canny进行图像边缘检测 CV2提供了提取图像边缘的...
    99+
    2023-01-28
    Python使用cv2.canny cv2.canny图像边缘检测 Python图像
  • OpenCV实现Sobel边缘检测的示例
    目录一、Sobel算法1、算法概述2、主要函数二、C++代码三、python代码四、结果展示五、相关链接一、Sobel算法 1、算法概述 Sobel边缘检测算法比较简单,实际应用中效...
    99+
    2022-11-13
    OpenCV Sobel边缘检测 OpenCV 边缘检测
  • Python图像锐化与边缘检测之Scharr,Canny,LOG算子详解
    目录一.Scharr算子二.Cann算子三.LOG算子四.总结一.Scharr算子 由于Sobel算子在计算相对较小的核的时候,其近似计算导数的精度比较低,比如一个3×3...
    99+
    2022-12-21
    Python Scharr Canny LOG Python Scharr Python Canny Python LOG
  • Python利用OpenCV和skimage实现图像边缘检测
    目录一、简介二、opencv 实践三、skimage 实践一、简介 提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算...
    99+
    2022-12-28
    Python OpenCV 图像边缘检测 Python skimage图像边缘检测 Python图像边缘检测
  • python实现图像边缘检测
    本文实例为大家分享了python实现图像边缘检测的具体代码,供大家参考,具体内容如下 任务描述 背景 边缘检测是数字图像处理领域的一个常用技术,被广泛应用于图像特征提取、目标识别、计...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作