使用Python,OpenCV和Hough圆检测图像中的圆

  • 1. 效果图
  • 2. cv2.HoughCircles(image, method, dp, minDist)
  • 3. 源码
  • 参考

前几篇博客中有介绍,使用OpenCV检测图形中的三角形、正方形、矩形,多边形;这篇博客将展示如何利用cv2.HoughCircles函数使用OpenCV检测图像中的圆圈。

1. 效果图

圆的检测要比正方形、矩形的检测要难,因为不能简单的根据轮廓的点数来确定圆;

简单圆的检测

8个圆的检测,设置minDist:像素100,检测的乱七八糟


8个圆的检测,设置minDist 像素75,发现有点问题,最大的圆并没有检测出来,因为设置的圆心之间的距离为75像素

2. cv2.HoughCircles(image, method, dp, minDist)

  • image:8位单通道图像。如果要处理彩色图像,请先转换为灰度。
  • method:定义检测图像中圆圈的方法。当前,唯一实现的方法是cv2.HOUGH_GRADIENT,
  • dp:该参数是累加器分辨率与图像分辨率的反比。本质上,dp越大,累加器阵列越小。
  • minDist:检测到的圆的中心(x,y)坐标之间的最小距离。如果minDist太小,则可能(错误地)检测到与原始对象相同邻域中的多个圆圈。如果minDist太大,则可能根本检测不到某些圆圈。
  • param1:用于处理边缘检测的渐变值。
  • param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,将检测到更多的圆圈(包括假圆圈)。阈值越大,可能会返回更多的圈。
  • minRadius:半径的最小大小(以像素为单位)。
  • maxRadius:半径的最大大小(以像素为单位)。

在设置参数时,正确设置minDist参数非常的重要。没有最佳的minDist值,检测最终会漏掉某些圆圈○,也可能检测到许多错误的圆圈。

3. 源码

# USAGE
#  python detect_circles.py --image images/simple.png# 导入必要的包
import argparseimport cv2
import numpy as np# 构建命令行参数及解析
# --image 要检测圆的图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加载图像,复制到output,并转换为灰度图
image = cv2.imread(args["image"])
output = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 在图像上检测圆
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)# 确保有圆检测到进行后续操作
if circles is not None:# 将圆从浮点(x,y)坐标转换为整数,从而可以在输出图像上绘制圆。circles = np.round(circles[0, :]).astype("int")# 遍历圆的中心点,及半径for (x, y, r) in circles:# 在输出图像上绘制圆,并且在圆中心绘制一个矩形框cv2.circle(output, (x, y), r, (0, 255, 0), 4)cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)# 展示输出图像cv2.imshow("output", np.hstack([image, output]))cv2.waitKey(0)

参考

  • https://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/

使用Python,OpenCV和Hough圆检测图像中的圆相关推荐

  1. Python+OpenCV:Hough直线检测(Hough Line Transform)

    Python+OpenCV:Hough直线检测(Hough Line Transform) 理论 A line can be represented as  or in a parametric fo ...

  2. hough变换检测直线 matlab,Matlab实现Hough变换检测图像中的直线

    Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...

  3. Python+OpenCV:Hough圆检测(Hough Circle Transform)

    Python+OpenCV:Hough圆检测(Hough Circle Transform) ##################################################### ...

  4. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

    Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...

  5. python检测屏幕亮点_使用Python和OpenCV检测图像中的多个亮点

    点击上方"蓝色小字"关注我呀 本文来自光头哥哥的博客[Detecting multiple bright spots in an image with Python and Ope ...

  6. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  7. 使用 OpenCV 在 Python 中检测图像中的形状

    OpenCV 是一个开源库,主要用于处理图像和视频以识别形状.对象.文本等.它主要与 python 一起使用.在本文中,我们将了解如何检测图像中的形状.为此,我们需要OpenCV 的cv2.findC ...

  8. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. 如何使用Python在OpenCV中检测图像中的猫脸?

    haar 级联分类器是一种有效的对象检测方法.这是一种基于机器学习的方法.为了训练用于猫脸检测的haar级联分类器,该算法最初需要大量的正面图像(有猫脸的图像)和负面图像(没有猫脸的图像).分类器是从 ...

最新文章

  1. 【转】ABAP的坑2
  2. python类对象赋值_Python对象赋值、浅拷贝、深拷贝
  3. HDU2586(最近公共祖先的Tarjan算法)
  4. Docke--利用 commit 理解构建镜像
  5. 无向图java_Java实现无向图的建立与遍历
  6. java多线程-CountDownLatch
  7. 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
  8. 拓端tecdat|豆瓣大数据分析告诉你,高评分影视密码
  9. 软考中级网络工程师的就业前景以及考试要求
  10. 计算机断层CT检查肺部混浊,揪出早期肺癌 低剂量电脑断层检查
  11. Microsoft SQL Server2005服务器安全与维护-李晨光-专题视频课程
  12. Linux vps 主机有免费稳定的推荐吗?
  13. Postman之脚本介绍( pre-request-script )
  14. [趣谈网络协议学习] 07 ICMP与ping:投石问路的侦察兵
  15. 机器学习(十一):新闻摘要提取小案例
  16. label 与laber for的区别之鸡零狗碎
  17. 删除gluster volume数据报错:no space left
  18. 阿里云centos镜像下载
  19. 【CISSP备考笔记】第2章:资产安全
  20. 初级程序员必学Java 教程

热门文章

  1. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类
  2. Centos7 下安装VIM编辑器
  3. cnblogs和org2blog使用总结
  4. 2022-2028年中国润滑油基础油行业市场研究及前瞻分析报告
  5. 动手动脑课后实验性的问题
  6. spring-boot学习资料
  7. enote笔记语言(2)(ver0.3)
  8. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
  9. treeview 保持选中状态
  10. OpenCV+python:模糊操作