python cv2.HoughCircles 霍夫圆检测
HoughCircles使用与说明
- 1. HoughCircles说明
- 2. 代码
- 3.结果
cv2提供了一种圆检测的方法:HoughCircles。该函数的返回结果与参数设置有很大的关系。
检测的图像时9枚钱币,分别使用了阈值(大津法和三角法)、均值偏移滤波以及未处理图像。实验的结果是只要调整param1和param2两个参数,上述方法都能准确的识别图像中的圆形。与圆最贴切的是大津法阈值。使用该方法同时需要使用cv2.THRESHOLD_TRUNC。
1. HoughCircles说明
函数定义如下:
HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
参数 | 含义 |
---|---|
image | 原始图像 |
method | 目前只支持cv2.HOUGH_GRADIENT |
dp | 图像解析的反向比例。1为原始大小,2为原始大小的一半 |
minDist | 圆心之间的最小距离。过小会增加圆的误判,过大会丢失存在的圆 |
param1 | Canny检测器的高阈值 |
param2 | 检测阶段圆心的累加器阈值。越小的话,会增加不存在的圆;越大的话,则检测到的圆就更加接近完美的圆形 |
minRadius | 检测的最小圆的半径 |
maxRadius | 检测的最大圆的半径 |
2. 代码
# coding:utf8import cv2
import numpy as npdef row_method(src):image = np.array(src)cimage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度图circles = cv2.HoughCircles(cimage, cv2.HOUGH_GRADIENT, 1, 40, param1=250, param2=58, minRadius=0)circles = np.uint16(np.around(circles)) # 取整for i in circles[0, :]:cv2.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2) # 在原图上画圆,圆心,半径,颜色,线框cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2) # 画圆心cv2.putText(image, "param1=250, param2=58", (20, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)cv2.imshow("row_circles", image)def threshold_OTSU_method(src):image = np.array(src)cimage = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 灰度图th, dst = cv2.threshold(cimage, 200, 255, cv2.THRESH_BINARY + cv2.THRESH_TRUNC + cv2.THRESH_OTSU)circles = cv2.HoughCircles(dst, cv2.HOUGH_GRADIENT, 1, 40, param1=50, param2=47, minRadius=0)circles = np.uint16(np.around(circles)) # 取整for i in circles[0, :]:cv2.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2) # 在原图上画圆,圆心,半径,颜色,线框cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2) # 画圆心cv2.putText(image, "param1=50, param2=47", (20, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)cv2.imshow("otsu_circles", image)def threshold_triangle_method(src):image = np.array(src)cimage = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 灰度图th, dst = cv2.threshold(cimage, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_TRIANGLE)circles = cv2.HoughCircles(dst, cv2.HOUGH_GRADIENT, 1, 40, param1=50, param2=17, minRadius=0)circles = np.uint16(np.around(circles)) # 取整for i in circles[0, :]:cv2.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2) # 在原图上画圆,圆心,半径,颜色,线框cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2) # 画圆心cv2.putText(image, "param1=50, param2=17", (20, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)cv2.imshow("triangle_circles", image)def mean_circles(src):image = np.array(src)dst = cv2.pyrMeanShiftFiltering(image, 10, 100) # 均值偏移滤波cimage = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY) # 灰度图circles = cv2.HoughCircles(cimage, cv2.HOUGH_GRADIENT, 1, 40, param1=50, param2=20, minRadius=0)circles = np.uint16(np.around(circles)) # 取整for i in circles[0, :]:cv2.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2) # 在原图上画圆,圆心,半径,颜色,线框cv2.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2) # 画圆心cv2.putText(image, "param1=50, param2=20", (20, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)cv2.imshow("mean_circles", image)src = cv2.imread("circle.png") # 读取图片位置
cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image", src)
threshold_OTSU_method(src)
threshold_triangle_method(src)
mean_circles(src)
row_method(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.结果
python cv2.HoughCircles 霍夫圆检测相关推荐
- OpenCV基于Python霍夫圆检测—标准霍夫圆检测
标准霍夫圆检测 1. 简介 2. 标准霍夫圆检测 2.1 情形一 2.2 情形二 2.3 情形三 3. 程序演示 4. 结尾 参考资料 1. 简介 1972年,R. D. Duda和P. E. Har ...
- 使用Python测试霍夫圆检测
目录 1. 目的 2. 霍夫园检测的原理 3. 使用opencv测试 1. 目的 记录使用python学写霍夫圆检测的过程 2. 霍夫园检测的原理 略!别怪我,这个涉及到数学原理.有时间我再进行补充, ...
- OpenCV基于Python霍夫圆检测—基于梯度的霍夫圆检测
基于梯度的霍夫圆检测 1. 回顾与目标 2. 基于梯度的霍夫圆检测 2.1 问题分析 2.2 基于梯度的霍夫圆检测步骤 3. 基于梯度的霍夫圆检测函数HoughCircles 3.1 函数HoughC ...
- 霍夫圆检测(HoughCircles)
霍夫圆检测 1.霍夫圆检测 从平面坐标到极坐标需要转换三个参数,C(x0,y0,r)C(x_0,y_0,r)C(x0,y0,r),其中(x0,y0)(x_0,y_0)(x0,y0)为圆心. 假 ...
- OpenCV 霍夫圆检测
圆的表示式是: 其中aa和bb表示圆心坐标,rr表示圆半径,因此标准的霍夫圆检测就是在这三个参数组成的三维空间累加器上进行圆形检测,此时效率就会很低,所以OpenCV中使用霍夫梯度法进行圆形的检测. ...
- OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
1 模板匹配 1.1 原理 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最 ...
- 霍夫圆检测进行钢管检测
通过霍夫圆检测来检测图片中的圆形.例如钢管检测 HoughCircles里面的参数是可以自己设置的,具体参数的设置,在文章的最后. 再把参数调整一下检测效果还会好一些. import cv2 as c ...
- Opencv 霍夫变换 霍夫圆检测
霍夫变换是一种特征提取术,在了解霍夫变换 霍夫检测之前 需要首先明白什么是霍夫空间:以圆形举例子,弄明白形状的原理,直线的变换与检测也就不难理解 霍夫空间,是一种三维空间,三个坐标分别为圆的横纵坐标, ...
- 【opencv-python】霍夫圆检测
霍夫变换检测直线的原理是利用累加器找到最大的(ρ,θ)(ρ,θ)(ρ,θ)数对,如文章所述.圆形的数学表达式为(x−xcenter)2+(y−ycenter)2=r2(x-x_{center})^2+ ...
最新文章
- 青源 LIVE 第 28 期 | 北大燕博南:下一代AI芯片—存内计算的硬核与软着陆
- 1.11.Flink DataSetAPI、DataSet API之Data Sources、DataSet API之Transformations、DataSet Sink部分详解
- Apache JMeter 3.2版新特性详述
- 腾讯Angel成世界顶级AI项目!中国首个从LF AI基金会的毕业项目
- python升级pip_新手求助, python 升级 pip 失败
- 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
- PL/SQL Developer跑在Oracle 64位数据库上初始化错误
- 全球独家 | 赋予企业级开源无限可能,阿里云首发云数据库MongoDB 4.2版本
- Hadoop集群(第2期)_机器信息分布表
- BUG——Celery ValueError: not enough values to unpack
- 一个人学习3D视觉太痛苦了怎么办?
- 前端跨域 ——实践总结,亲测有效
- 南阳oj-----找球号(一)(set)
- 论OSPF中ASBR和ABR
- Hadoop流程---从tpch到hive
- 电商扣减库存_二类电商:鲁班今日最新消息!
- 你所不知道的网站外链高级操作策略
- pyqt系列原创入门教程
- zzulioj 1788: 小金刚的宝藏 (01背包)
- 索尼toio创意机器人套件国行版正式发布,定价1999元