边缘检测
边缘检测
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)
参数介绍
- image:输入图像。
- 类型:8位单通道图像(通常是灰度图像)。
- 说明:输入图像应为灰度图像。可以使用 cv2.cvtColor 将彩色图像转换为灰度图像。
- threshold1:第一个阈值。
- 类型:浮点数。
- 说明:用于边缘检测的低阈值。任何强度低于此阈值的梯度将被抑制(非边缘)。
- threshold2:第二个阈值。
- 类型:浮点数。
- 说明:用于边缘检测的高阈值。任何强度高于此阈值的梯度将被保留(边缘)。介于这两个阈值之间的梯度将根据其连通性来决定是否保留。
- apertureSize:Sobel算子的大小(可选参数)。
- 类型:整数。
- 默认值:3
- 说明:用于计算图像梯度的Sobel算子的孔径大小。可以是3、5、7等,默认为3。孔径大小越大,计算出的梯度越精细。
- L2gradient:是否使用更精确的L2范数(可选参数)。
- 类型:布尔值。
- 默认值:False
说明:如果为True,则使用L2范数(更精确的梯度幅值计算,即 (\sqrt{(dI/dx)^2 + (dI/dy)^2}))。如果为False,则使用L1范数(即 (|dI/dx| + |dI/dy|))。
Canny算子中自带的边缘检测步骤
- 噪声去除:使用高斯滤波器平滑图像,减少噪声
- 计算梯度:使用Sobel算子计算图像的梯度强度和方向。
- 非极大值抑制:在梯度图像中仅保留局部最大值,抑制非边缘像素。
- 双阈值处理:应用两个阈值对梯度图像进行分类,确定强边缘、弱边缘和非边缘。
- 边缘连接:通过分析强边缘和弱边缘的连通性,确定最终的边缘。