边缘检测

边缘检测

OpenCv边缘检测算子

算子名称 描述
Canny算子★ 基于边缘梯度方向的非极大值抑制
双阈值的滞后阈值处理
基于Sobel算子
Sobel算子 一阶微分,分X、Y方向
Laplacian算子 二阶微分,与方向无关,对噪音抑制效果较差,对精细细节有较好的检测
Scharr滤波器
HoughLines
HoughLinesP
HoughCircles
findContours
drawContours
boundingRect
minAreaRect
minEnclosingCircle
fitEllipse
approxPolyDP
convexHull

Canny算子

https://blog.csdn.net/fu_shuwu/article/details/78219640

Canny算子是一种用于边缘检测的常用算法,由John F. Canny在1986年提出。它的目标是在图像中找到所有显著的边缘,同时尽量减少噪声和错误检测。

Canny边缘检测器在OpenCV中通过函数 cv2.Canny() 实现(基于Sobel)。该函数的参数如下:

cv2.Canny() 函数签名

edges = cv2.Canny(image, threshold1, threshold2, apertureSize=3, L2gradient=False)

参数介绍

  1. image:输入图像。
    • 类型:8位单通道图像(通常是灰度图像)。
    • 说明:输入图像应为灰度图像。可以使用 cv2.cvtColor 将彩色图像转换为灰度图像。
  2. threshold1:第一个阈值。
    • 类型:浮点数。
    • 说明:用于边缘检测的低阈值。任何强度低于此阈值的梯度将被抑制(非边缘)。
  3. threshold2:第二个阈值。
    • 类型:浮点数。
    • 说明:用于边缘检测的高阈值。任何强度高于此阈值的梯度将被保留(边缘)。介于这两个阈值之间的梯度将根据其连通性来决定是否保留。
  4. apertureSize:Sobel算子的大小(可选参数)。
    • 类型:整数。
    • 默认值:3
    • 说明:用于计算图像梯度的Sobel算子的孔径大小。可以是3、5、7等,默认为3。孔径大小越大,计算出的梯度越精细。
  5. L2gradient:是否使用更精确的L2范数(可选参数)。
    • 类型:布尔值。
    • 默认值:False
      说明:如果为True,则使用L2范数(更精确的梯度幅值计算,即 (\sqrt{(dI/dx)^2 + (dI/dy)^2}))。如果为False,则使用L1范数(即 (|dI/dx| + |dI/dy|))。

Canny算子中自带的边缘检测步骤

  1. 噪声去除:使用高斯滤波器平滑图像,减少噪声
  2. 计算梯度:使用Sobel算子计算图像的梯度强度和方向。
  3. 非极大值抑制:在梯度图像中仅保留局部最大值,抑制非边缘像素。
  4. 双阈值处理:应用两个阈值对梯度图像进行分类,确定强边缘、弱边缘和非边缘。
  5. 边缘连接:通过分析强边缘和弱边缘的连通性,确定最终的边缘。

Sobel算子

Laplacian算子

Scharr滤波器

posted @ 2024-04-23 19:33  回首起了风沙  Views(22)  Comments(0Edit  收藏  举报