• 售前

  • 售后

热门帖子
入门百科

OpenCV霍夫圆变更cv2.HoughCircles()

[复制链接]
我心如烟卸 显示全部楼层 发表于 2021-8-14 11:51:33 |阅读模式 打印 上一主题 下一主题
目录


  • 1. 结果图
  • 2. 源码
  • 参考
这篇博客将学习如何利用霍夫圆变换在图像中找到圆圈,OpenCV利用cv2.HoughCircles()实现霍夫圆变换。
  1. <strong>circles = cv2.HoughCircles(img,
  2. cv2.HOUGH_GRADIENT, 1, 20,
  3. param1=50, param2=40, minRadius=25, maxRadius=0)</strong>
  4. img: 待检测的灰度图cv2.HOUGH_GRADIENT:检测的方法,霍夫梯度1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半20:检测到的相邻圆的中心的最小距离(如果参数太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)param1:在#HOUGHŠu梯度的情况下,它是较高的. 两个阈值传递到Canny边缘检测器(较低的一个小两倍)。param2:在#HOUGHŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;minRadius:最小圆半径maxRadius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。
复制代码
1. 结果图

原始图 VS 检测圆结果图如下:
如下右图可以看到3个外侧圆绿色,圆心赤色被成功检测到;


圆的最小半径设置由25调解为10,也可能会错误的检测到圆,结果图如下:


检测圆半径的阈值(param2设置35)的结果,最小圆半径设置10,也可能会错误的检测到圆,结果图如下:



2. 源码
  1. # 霍夫圆检测
  2. import cv2
  3. import numpy as np
  4. cimg = cv2.imread('opencv_logo_350.jpg')
  5. cv2.imshow("origin", cimg)
  6. cv2.waitKey(0)
  7. img = cv2.cvtColor(cimg,cv2.COLOR_BGR2GRAY)
  8. img = cv2.medianBlur(img, 5)
  9. cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
  10. # - img: 待检测的灰度图
  11. # - cv2.HOUGH_GRADIENT:检测的方法,霍夫梯度
  12. # - 1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半
  13. # - 20:检测到的圆的中心的最小距离(如果参数为太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)
  14. # - param1:在#HOUGHŠu梯度的情况下,它是较高的. 两个阈值传递到Canny边缘检测器(较低的一个小两倍)。
  15. # - param2:在#HOUGHŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;
  16. # - minRadius:最小圆半径,也可能会检测到假圆
  17. # - maxRadius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。
  18. circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
  19.                            param1=50, param2=40, minRadius=0, maxRadius=0)
  20. # 最小圆半径设置不合适,也可能会检测到假圆
  21. # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
  22. #                            param1=50, param2=40, minRadius=0, maxRadius=0)
  23. # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20,
  24. #                            param1=50, param2=30, minRadius=10, maxRadius=0)
  25. circles = np.uint16(np.around(circles))
  26. print(len(circles))
  27. print(circles)
  28. for i in circles[0, :]:
  29.     # 绘制外圈圆(蓝色)
  30.     cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
  31.     # 绘制圆心(红色)
  32.     cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)
  33. cv2.imshow('detected circles', cimg)
  34. cv2.waitKey(0)
  35. cv2.destroyAllWindows()
复制代码
参考

https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html#hough-circles
到此这篇关于OpenCV霍夫圆变换cv2.HoughCircles()的文章就介绍到这了,更多相关OpenCV霍夫圆变换内容请搜索脚本之家以前的文章或继承欣赏下面的相关文章希望大家以后多多支持脚本之家!

本帖子中包含更多资源

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

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作