霍夫变动:原理分析与 OpenCV 应用实例

[复制链接]
发表于 2025-12-19 07:00:35 | 显示全部楼层 |阅读模式

简介:本文围绕霍夫变动相干内容睁开,先是解说霍夫变动根本原理,包罗从 xy 坐标系到 kb 坐标系及极坐标系的映射等。接着先容了 cv2.HoughLines、cv2.HoughLinesP 概率霍夫变动、cv2.HoughCircles 霍夫圆变动的函数用法、参数寄义、与通例霍夫变动区别以及实现步调,并附代码示例,助力读者明确和运用这些图像检测技能。
如果我的文章对你有资助,请点赞收藏关注,我将会连续为您带来更多与OpenCV有关的知识。

  
霍夫变动根本原理

画一张图 y = kx+b:,用xy坐标系如图所示:

如果用k,b坐标系该如许表现:

(xy空间的一条线确定了kb空间的一个点)
我现在在xy轴里取一个点 (x0,y0):

此时x0,y0确定,他大概在恣意一条直线上,根据公式 y0 = kx0+b,那么b = y0-kx0,以是在kb空间上:

阐明xy的一个点对应 kb的一条线
再来观察,两个xy坐标的点 x0,y0 x1,y1,同时两点确定了一条直线,看图:

对应在kb空间应该是如下图:

我们会举行三步推理:
第一步:xy坐标系的一条直线上的两个点,对应着kb空间颠末同一个点的两条直线。
第二步:推理可以知道,kb坐标系中心颠末一个点的直线越多,阐明在xy坐标系中是由更多的点所构成。
第三步:已知两个点确定一条直线,对于图像中的线怎么确定不是谬误,噪声呢?那多个点确定的直线不堕落的概率相对来说肯定是更大的
第四步:霍夫变动选择直线的根本思绪是,选择又尽大概多的直线交汇的点
但是,有一种特殊环境不能完成从xy坐标系映射到kb坐标系:垂线

以是可以映射到极坐标系:r = xcosa+ ysina

cv2.HoughLines函数

lines 返回的ndarray数组,数组的每一对数据都是(r,a) = cv2.HoughLines(image输入图像必须是八位单通道二值图像 ,rho为r的精度一样寻常为1,theta为角度的精度一样寻常环境使用pi/180,threshold是阈值,他是霍夫空间的直线条数大于阈值才气被以为是xy空间的直线,以是阈值越小找到的直线越多)
我们选择验证的例子基于这张图片,我给他定名为calculator.JPG放在跟代码同一个文件夹下,各人可以复制我的图片重定名自己去运行代码

实现一次霍夫变动

(第一步)读取图片
(第二步)转化为灰度图
(第三步)使用cv2.Canny边沿检测得到边沿
(第四步)使用霍夫变动
(第五步)为了看到霍夫变革的差别,将原图从bgr转化成 rgb,并复制一张原图片
(第六步)对霍夫变动的结果从极坐标转换成xy坐标并在原图画线
(第七步)展示原图与画线后的图片差别
  1. import numpy as np
  2. import cv2
  3. import matplotlib.pyplot as plt
  4. img = cv2.imread("calculator.JPG")
  5. # 转化为灰度图
  6. gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  7. #使用cv2.Canny边缘检测获得边缘
  8. edges = cv2.Canny(gray,50,150,apertureSize = 3)
  9. #使用霍夫变换
  10. lines = cv2.HoughLines(edges,1,np.pi/180,133)
  11. #为了看到霍夫变化的差异,将原图从bgr转化成 rgb,并复制一张原图片
  12. orgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  13. oShow = orgb.copy()
  14. # 对霍夫变换的结果从极坐标转换成xy坐标并在原图画线
  15. for line in lines:
  16.     rho,theta =</
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表