python-opencv之边缘检测(cv2.Canny)

article/2025/9/23 17:44:33

理论

Canny边缘检测是一种常用的边缘检测算法,并且他是一个多阶段的算法,分成如下几个阶段:

1. 消除噪声
由于边缘检测容易受到图像中噪声的影响,第一步是用5x5高斯滤波器去除图像中的噪声。
2. 寻找图像的强度梯度
然后对平滑后的图像进行水平方向和垂直方向的Sobel核滤波,得到水平方向(Gx)和垂直方向(Gy)的一阶导数。从这两张图像中,我们可以找到每个像素的边缘梯度和方向如下:
在这里插入图片描述
注:梯度方向总是垂直于边缘。它被四舍五入到四个角中的一个,分别代表垂直、水平和两个对角线方向。
3. 非极大值抑制
在获得梯度大小和方向后,对图像进行全面扫描,以去除任何可能不构成边缘的多余像素。为此,在每个像素处,检查像素是否在梯度方向上的邻域内为局部极大值。查看下面的图片:
在这里插入图片描述
点A在边缘上(垂直方向)。梯度方向垂直于边缘。点B和点C在梯度方向上。将点A与点B和点C检验是否形成局部极大值。如果是,则考虑下一阶段,否则将抑制(置零)。

简而言之,你得到的结果是一个“薄边缘”的二值图像。
4. 双阈值检测(Hysteresis Thresholding)
这个阶段决定哪些是真正的边,哪些不是。为此,我们需要两个阈值,minVal和maxVal。任何强度梯度大于maxVal的边肯定是边,而小于minVal的边肯定是非边,因此丢弃。位于这两个阈值之间的边界根据它们的连通性被分类为边或非边。如果它们连接到“确定边缘”像素,则它们被认为是边缘的一部分。否则,它们也会被丢弃。请看下图:
在这里插入图片描述
边A在maxVal之上,因此被认为是“稳边”。虽然C边在maxVal之下,但它与A边相连,因此这条边也被认为是有效的,我们得到了完整的曲线。但边B虽然在minVal之上,与边C在同一区域,但没有连接到任何“sure-edge”,故丢弃。因此,我们必须相应地选择minVal和maxVal以获得正确的结果,这是非常重的。

这一阶段还去除假设边是长线的小像素噪声。我们最终得到的是图像中的强边缘。

函数原型

Canny(image: Mat, threshold1, threshold2, edges=..., apertureSize=..., L2gradient=...)

  • image: 输入的图像
  • threshold1:双阈值检测的minVal
  • threshold2:双阈值检测的maxVal
  • apertureSize:它是用于寻找图像梯度的Sobel核的大小。缺省值是3。
  • L2gradient: 它指定了寻找梯度大小的方程。如果为True,则使用上面提到的更准确的方程,否则使用以下函数:Edge_Gradient(G)=|Gx|+|Gy|。缺省值为False。

代码实例

import matplotlib.pyplot as plt
import numpy as np
import cv2img = cv2.imread("./lena.jpg",cv2.IMREAD_COLOR)img = cv2.GaussianBlur(img,(5,5),1)canny_1 = cv2.Canny(img,60,150)
canny_2 = cv2.Canny(img,50,100)res = np.hstack((canny_1,canny_2))
cv2.imshow("canny",res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


http://chatgpt.dhexx.cn/article/aUAfIuJb.shtml

相关文章

Canny边缘检测算法及实现

Canny边缘检测算法及实现 微信公众号:幼儿园的学霸 目录 文章目录 Canny边缘检测算法及实现目录前言原理步骤实现参考资料 前言 提取图片的边缘信息是底层数字图像处理的基本任务之一.边缘信息对进一步提取高层语义信息有很大的影响. 对图像提取边缘可以通过图像的…

Canny边缘检测算法

Canny是目前最优秀的边缘检测算法,其目标为找到一个最优的边缘,其最优边缘的定义为: 好的检测:算法能够尽可能的标出图像中的实际边缘好的定位:标识出的边缘要与实际图像中的边缘尽可能接近最小响应:图像中…

Canny算子边缘检测原理及实现

写在前面 Canny边缘检是在在1986年提出来的,到今天已经30多年过去了,但Canny算法仍然是图像边缘检测算法中最经典、先进的算法之一。 相比Sobel、Prewitt等算子,Canny算法更为优异。Sobel、Prewitt等算子有如下缺点: 没有充分利…

Opencv(C++)学习系列---Canny边缘检测算法

目录 【1】边缘检测算法流程 【2】Canny算子介绍 【3】完整代码 【1】边缘检测算法流程 使用高斯滤波器来平滑图像,达到滤除噪声的效果。(降噪)计算图像中每个像素点的梯度大小和方向(求梯度,与sobel算法求梯度一致)使用非极大值抑制&…

OpenCV-Canny边缘检测

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void Canny( InputArray image, OutputArray edges,double threshold1, double threshold2,int apertureSize 3, boo…

Python cv.Canny()方法参数与用法详解

函数原型与参数详解 OpenCV提供了cv.Canny()方法,该方法将输入的原始图像转换为边缘图像。该方法的原型为: cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edges cv.Canny(dx, dy, threshold1, threshold2[…

OpenCV—python 边缘检测(Canny)

边缘检测 一、边缘定义及类型二、边缘检测算子类别三、OpenCV-Python 中 Canny() 参数 一、边缘定义及类型 边缘类型:简单分为4中类型,阶跃型、屋脊型、斜坡型、脉冲型,其中阶跃型和斜坡型是类似的,只是变化的快慢不同。 二、边…

Canny算子Matlab实现

1、Canny边缘提取原理 Canny边缘检测方法利用了梯度方向信息,采用“非极大抑制”以及双阈值技术,获得了单像素连续边缘,是目前所认为的检测效果较好的一种边缘检测方法。 先利用高斯函数对图像进行低通滤波;然后对图像中的每个像…

canny算子的python实现以及pytorch实现

canny算子的python实现以及pytorch实现 canny的python实现canny的pytorch实现 canny的python实现 参考Canny边缘检测算法(python 实现) import numpy as np import cv2 as cv from matplotlib import pyplot as pltdef smooth(image, sigma 1.4, length 5) :&qu…

Python 使用cv2.canny 进行图像边缘检测

CV2提供了提取图像边缘的函数canny。其算法思想如下: 1. 使用高斯模糊,去除噪音点(cv2.GaussianBlur)2. 灰度转换(cv2.cvtColor)3. 使用sobel算子,计算出每个点的梯度大小和梯度方向4. 使用非极…

计算机视觉中Canny算子详解

文章目录 前言一、Canny的实现步骤二、具体实现1.高斯平滑滤波2.计算梯度大小和方向3.非极大抑制4.双阈值(Double Thresholding)和滞后边界跟踪 总结 前言 Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法&#xff0c…

Canny 边缘检测算法

目录 一、边缘检测的步骤 二、最优边缘定义 三、Canny边缘检测算法步骤 1.对图像进行灰度化: 2.对图像进行高斯滤波: 3. 计算梯度幅值和方向 4.非极大值(Non-Maximum Suppression)抑制 5.用双阈值算法检测和连接边缘 代…

Canny算法

Canny Canny分为5个步骤 1)、使用高斯滤波器,以平滑图像,滤除噪声。 高斯滤波器是一种平滑空间滤波器,用于模糊处理和降低噪声。我们的高斯滤波器通过以下公式得到。 我们运用该公式计算出高斯卷积核,如k越大,检测…

OpenCv之Canny

目录 一、自适应阈值 二、边缘检测Canny 一、自适应阈值 引入前提:在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻…

图像处理——Canny算子

首先感谢以下两位的渊博知识: (1)爱鱼 https://www.cnblogs.com/mightycode/p/6394810.html (2)mitutao https://www.cnblogs.com/love6tao/p/5152020.html 图像边缘信息主要集中在高频段,通常…

Canny算子与霍夫变换检测圆与直线

目录 引言 一、canny算子 二、canny算子代码 三、霍夫变换检测直线 四、霍夫变换检测直线代码 五、霍夫变换检测直线效果 六、霍夫变换检测圆 七、霍夫变换检测圆代码 八、霍夫变换检测圆效果 引言 canny算子是计算机视觉最常用的一种算子,是目前一种非常流行…

OpenCV——Canny边缘检测(cv2.Canny())

Canny边缘检测 Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986 年,John F. Canny 发 表了著名的论文 A Computational Approach to Edge Detection,在该论文中详述了如何进行边缘 检测。 Canny()边缘检测步骤 Canny 边缘检测分为如下…

(十一)Canny 边缘检测算法

Canny边缘检测算法 一、边缘检测的步骤 1)滤波: 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感, 因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波、均值滤波…

Canny边缘检测算法的实现

图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加强高频分量的作用。在空域运算中来说,对图像的锐化就是计算微分。由于数字图像的离散信号,微分运…

【canny边缘检测】canny边缘检测原理及代码详解

文章目录 前言canny边缘检测算法主要流程一、高斯模糊二、图像梯度计算三、非极大值抑制四、双阈值边界跟踪 前言 本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测算法主要流程 canny边缘检测主要分为4个部分&#xff…