欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

OpenCV 从零学习 · 第 18 讲:霍夫变换(HoughLines / HoughCircles,检测直线和圆)

OpenCV 从零学习 · 第 18 讲:霍夫变换

函数:cv2.HoughLines / cv2.HoughLinesP / cv2.HoughCircles | 难度:★★★☆☆

霍夫变换能在"一堆边缘点"里找出符合几何形状(直线/圆)的集合。它不是逐像素比,而是把每个边缘点映射到参数空间投票,票数高的就是一条线/一个圆。常用于车道线、表格线、圆孔/硬币计数


一、直线:HoughLinesP(概率霍夫,最常用)

lines = cv2.HoughLinesP(edges, rho=1, theta=np.pi/180,
                        threshold=50, minLineLength=40, maxLineGap=5)
参数 含义
edgesCanny 边缘图(二值)
rho距离分辨率(像素),通常 1
theta角度分辨率,通常 π/180
threshold投票阈值,越大线越少越严
minLineLength最短线段长度
maxLineGap断点允许的最大空隙

返回 (N,1,4),每行是线段两端点 (x1,y1,x2,y2)——直接拿来画线,比 HoughLines 的 (rho,theta) 好用。

二、圆:HoughCircles

circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1,
        minDist=20, param1=100, param2=30, minRadius=0, maxRadius=0)
参数 含义
gray灰度图(HoughCircles 吃灰度)
dp累加器分辨率比,1=同分辨率
minDist两圆最小中心距,防重复检测
param2圆心累加阈值,越大圆越少越严
场景 A · 车道线 / 文档表格线
对道路图 Canny 后 HoughLinesP,抽取长直线当车道候选;扫描件先做透视矫正(第 20 讲)再用直线检测抽出表格框线。
场景 B · 圆孔 / 硬币计数
HoughCircles 找出所有圆,len(circles[0]) 即数量,遍历画圆圈——工业零件圆孔统计、硬币清点。
⚠ 新手必踩坑
  • 直线检测输入是 Canny 边缘图(二值),不是原图;先 Canny 再 Hough。
  • HoughLines 返回 (rho, theta) 极坐标,要自己换算成线段;新手直接用 HoughLinesP 拿端点。
  • HoughCircles灰度图,且 param2 调小会满屏假圆、调大会漏圆,需按图微调。
  • 结果可能为空(None),遍历前先判空,否则报错。

本讲要点

  • 直线用 HoughLinesP(端点直出),输入 Canny 边缘。
  • 圆用 HoughCircles(灰度图),param2 控制严格度。
  • 霍夫是"从边缘投票找形状",适合规则几何目标。

下一讲:第 19 讲 · 图像分割(GrabCut / 分水岭)——把前景从背景里"抠"出来,处理重叠物体分离。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功