Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,小编给大家分享一下Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一
千家信息网最后更新 2025年11月15日Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形
小编给大家分享一下Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
第一章:霍夫变换检测圆
① 实例演示1
这个是设定半径范围 0-50 后的效果。

② 实例演示2
这个是设定半径范围 50-70 后的效果,因为原图稍微大一点,半径也大了一些。

③ 霍夫变换函数解析
cv.HoughCircles() 方法
参数分别为:image、method、dp、minDist、param1、param2、minRadius、maxRadius
其中:
image 为灰度图像;
method 使用的方法为霍夫梯度法,目前已知的有 HOUGH_GRADIENT 和 HOUGH_GRADIENT_ALT 两种,后者的准确率会更高一点;
dp 为累加器分辨率与图片分辨率的反比。
minDist 为两个圆中心的最小距离;
param1 对于 CV_HOUGH_GRADIENT 表示传入 canny 边缘检测的阈值;
param2 对于 CV_HOUGH_GRADIENT 表示检测阶段圆心的累加阈值,值越小能检测出的圆越多,值越大的话就检测出来的少,但是检测出来的圆形相比于没检测出来的会更圆、更完美一些;
minRadius 为最小半径;
minRadius 为最大半径;
首先通过均值偏移滤波降噪来排除干扰的点,提高识别的准确率,然后进行灰度处理。
# 均值偏移滤波降噪处理mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100)cv.imshow("mean_filter_img", mean_filter_img)# 图像灰度处理gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY)# 霍夫圈变换# 参数分别为:image, method, dp, minDist, param1, param2, minRadius, maxRadius# 其中:image为灰度图像,method使用的方法为霍夫梯度法,minDist两个圆中心的最小距离circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50)第二章:Python + opencv 完整检测代码
① 源代码
# -*- coding:utf-8 -*-# 2021-12-17# 作者:小蓝枣# opencv圆形检测import cv2 as cvimport numpy as npdef detect_circle(image): ''' 作用:圆形检测 参数:需要检测圆的图片 返回:检测出圆形的信息 ''' # 均值偏移滤波降噪处理 mean_filter_img = cv.pyrMeanShiftFiltering(image, 10, 100) cv.imshow("mean_filter_img", mean_filter_img) # 图像灰度处理 gray_img = cv.cvtColor(mean_filter_img, cv.COLOR_BGR2GRAY) # 霍夫圈变换 # 参数分别为:image, method, dp, minDist, param1, param2, minRadius, maxRadius # 其中:image为灰度图像,method使用的方法为霍夫梯度法,minDist两个圆中心的最小距离 circles = cv.HoughCircles(gray_img, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=0, maxRadius=50) # 对数据进行取整 print("取整前信息:" + str(circles)) circles = np.uint16(np.around(circles)) print("取整后信息:" + str(circles)) return circles def draw_circle(img, circles): ''' 作用:根据圆形信息在图片中绘制圆 参数1:原始图片信息 参数2:圆形坐标信息 返回:无 ''' for i in circles[0, :]: # 绘制圆外圈 # 参数分别为:圆心、半径、颜色、线框宽度 cv.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2) # 绘制圆心 cv.circle(img, (i[0], i[1]), 2, (255, 0, 0), 2) cv.imshow("draw_circle_img", img)# 读取图片信息img = cv.imread("./image/meixi.jpg")# 设置窗口不可改变大小(参数包含:WINDOW_AUTOSIZE、WINDOW_NORMAL、WINDOW_OPENGL)cv.namedWindow("original image", cv.WINDOW_AUTOSIZE)cv.imshow("original image", img)# 检测圆circles = detect_circle(img)#绘制圆draw_circle(img, circles)cv.waitKey(0)cv.destroyAllWindows()② 运行效果图
原始图片:
降噪后效果:
霍夫变换检测圆处理后效果:
取整后效果图:
以上是"Python OpenCV基于霍夫圈变换算法如何检测图像中的圆形"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
检测
霍夫
圆形
参数
图像
变换
信息
半径
图片
效果
灰度
处理
最小
方法
别为
两个
圆心
均值
梯度
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嘉定网络安全赛
运维学习网络安全吗
阳春定制软件开发
vba如何导出数据库
慧科网络技术
4台服务器一个公网ip
数据库基础与应用的简答题
游唐网络安全海报
捷克解说宝可梦服务器
网络安全法 个人数据
大学校园网络安全法律法规
maven迁移新服务器
大连市网络安全宣传周问题
上海安卓软件开发费用多少
德州crm软件开发
上海管理金融网络技术服务
保护我们的网络安全手抄报
第一届中国联通网络技术大会
网络安全信息化建设应用前景
协议是一组硬件还是一组服务器
邵武软件开发外包
护苗网络安全课课程
云数据库时空大数据
数据库都有什么问题
游戏中什么是数据库错误
苏州边锋网络技术有限公司
广州卧牛网络技术有限公司
网络安全应急响应分类
软件开发需要招投标
网络安全法对单位的最高罚金