简介:本文围绕霍夫变动相干内容睁开,先是解说霍夫变动根本原理,包罗从 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坐标并在原图画线
(第七步)展示原图与画线后的图片差别
- import numpy as np
- import cv2
- import matplotlib.pyplot as plt
- img = cv2.imread("calculator.JPG")
- # 转化为灰度图
- gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
- #使用cv2.Canny边缘检测获得边缘
- edges = cv2.Canny(gray,50,150,apertureSize = 3)
- #使用霍夫变换
- lines = cv2.HoughLines(edges,1,np.pi/180,133)
- #为了看到霍夫变化的差异,将原图从bgr转化成 rgb,并复制一张原图片
- orgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
- oShow = orgb.copy()
- # 对霍夫变换的结果从极坐标转换成xy坐标并在原图画线
- for line in lines:
- rho,theta =</
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |