边缘检测与轮廓提取:Canny算子、霍夫变换、轮廓分析完整指南
引言
你有没有想过,自动驾驶汽车是怎么“看见”车道线的?手机APP是怎么一键测量杯子直径的? 答案藏在今天要聊的两个基础且硬核的计算机视觉技术里——边缘检测和轮廓提取。
简单来说:
- 边缘:是图像中亮度/颜色“跳变”最剧烈的像素点集合,对应物体边界、阴影、纹理变化等;
- 轮廓:是把这些跳变的点连起来形成的闭合曲线,能直接框出我们关心的“形状”。
这俩技术是传统CV的“敲门砖”,也是很多高级任务的前置步骤。
1. 边缘检测基础概念
1.1 什么是边缘?
边缘是图像的“高频信号”,通常出现在:
- 物体与背景的交界处
- 不同材质/纹理的过渡区
- 光照阴影的边缘
- 颜色的突变位置
1.2 数学原理:梯度
边缘检测本质上是寻找图像梯度的局部最大值:
- 梯度幅值:衡量亮度变化的强度(幅值越大,越可能是边缘)
- 梯度方向:指示亮度变化的方向(边缘垂直于梯度方向)
2. Canny边缘检测详解
Canny算子是John F. Canny在1986年提出的最优边缘检测算法,至今仍是工业界的“黄金标准”。
2.1 算法四步走
- 高斯滤波:平滑图像,去除噪声(噪声会被误判为边缘)
- 计算梯度:用Sobel/Scharr算子求梯度幅值和方向
- 非极大值抑制(NMS):细化边缘(只保留梯度幅值的“峰值点”)
- 滞后阈值:用双阈值区分“真边缘”和“假边缘”
2.2 代码实现与参数调整
3. 霍夫变换详解
霍夫变换是特征提取技术,专门用来检测图像中的规则几何形状(直线、圆、椭圆等)。
3.1 核心原理(直线检测)
将图像空间的“点→线”问题,转换为参数空间的“线→点”投票问题:
- 图像中1个共线点→参数空间中1条线
- 参数空间中多条线的交点→图像中直线的参数
为避免垂直线的斜率问题,工业界常用极坐标形式:
ρ = x·cosθ + y·sinθ(ρ是原点到直线的距离,θ是直线法线与x轴的夹角)
3.2 实战:概率霍夫直线检测
概率霍夫变换(HoughLinesP)比标准霍夫变换更高效、更实用,直接返回线段的端点坐标。
3.3 霍夫圆检测
圆的参数是(x0,y0,r)(圆心坐标+半径),所以是三维投票,计算量更大,通常需要先高斯模糊再检测。
4. 轮廓提取与分析
轮廓是边缘检测的“升级版”,它能直接获取物体的完整边界和几何特征。
4.1 轮廓提取基础
轮廓提取需要二值图像(黑白图,黑背景白前景),OpenCV的findContours函数会返回轮廓列表和层次结构。
4.2 轮廓几何特征分析
轮廓能提取很多有用的特征,用于形状识别或尺寸测量:
5. 实战项目:简单形状检测器
结合轮廓分析和轮廓近似(approxPolyDP),我们可以快速识别三角形、矩形、正方形、圆形等常见形状。
6. 总结
边缘检测与轮廓提取是传统CV的核心技能,以下是关键要点:
🔗 扩展阅读

