OPENCV复习第二期
主要算法说明
Sobel 算子
- 用于计算图像的梯度(边缘),分别检测 x 方向(水平)和 y 方向(垂直)的边缘
cv2.Sobel(yt, cv2.CV_64F, dx=1, dy=0)
:计算 x 方向梯度(dx=1, dy=0)cv2.Sobel(yt, cv2.CV_64F, dx=0, dy=1)
:计算 y 方向梯度(dx=0, dy=1)- 使用
cv2.CV_64F
是为了保留梯度的正负值(边缘可能是亮到暗或暗到亮) cv2.convertScaleAbs()
:将梯度值转换为绝对值并转为 8 位图像(便于显示)cv2.addWeighted()
:将 x 和 y 方向的边缘图像融合,得到完整边缘
Scharr 算子
- 是 Sobel 算子的改进版,在 3x3 卷积核下具有更高的精度,对边缘的检测更敏感
- 使用方式与 Sobel 类似:
cv2.Scharr(yt, cv2.CV_64F, dx=1, dy=0)
- 适用于需要更精确边缘检测的场景
Laplacian 算子
- 基于图像的二阶导数,对图像中的快速变化(边缘)更敏感
cv2.Laplacian(yt, cv2.CV_64F)
:直接计算图像的拉普拉斯变换- 对噪声较敏感,通常需要先进行平滑处理
Canny 边缘检测
- 一种多阶段的边缘检测算法,能有效抑制噪声并检测出真正的边缘
cv2.Canny(yt, 80, 120)
:两个阈值分别为低阈值和高阈值- 低于低阈值的像素被丢弃
- 高于高阈值的像素被保留为边缘
- 介于两者之间的像素,若与边缘像素相连则保留