OpenCV霍夫圆变换cv2.HoughCircles()的示例分析
这篇文章主要介绍OpenCV霍夫圆变换cv2.HoughCircles()的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT, 1, 20,param1=50, param2=40, minRadius=25, maxRadius=0)
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. 源码
#霍夫圆检测 importcv2 importnumpyasnp cimg=cv2.imread('opencv_logo_350.jpg') cv2.imshow("origin",cimg) cv2.waitKey(0) img=cv2.cvtColor(cimg,cv2.COLOR_BGR2GRAY) img=cv2.medianBlur(img,5) cimg=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) #-img:待检测的灰度图 #-cv2.HOUGH_GRADIENT:检测的方法,霍夫梯度 #-1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半 #-20:检测到的圆的中心的最小距离(如果参数为太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。) #-param1:在#HOUGHŠu梯度的情况下,它是较高的.两个阈值传递到Canny边缘检测器(较低的一个小两倍)。 #-param2:在#HOUGHŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆; #-minRadius:最小圆半径,也可能会检测到假圆 #-maxRadius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。 circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, param1=50,param2=40,minRadius=0,maxRadius=0) #最小圆半径设置不合适,也可能会检测到假圆 #circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, #param1=50,param2=40,minRadius=0,maxRadius=0) #circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, #param1=50,param2=30,minRadius=10,maxRadius=0) circles=np.uint16(np.around(circles)) print(len(circles)) print(circles) foriincircles[0,:]: #绘制外圈圆(蓝色) cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) #绘制圆心(红色) cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) cv2.imshow('detectedcircles',cimg) cv2.waitKey(0) cv2.destroyAllWindows()
以上是“OpenCV霍夫圆变换cv2.HoughCircles()的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
Linux如何安装和使用 OpenCV 计算机视觉库
-
Python OpenCV基本功能怎么用
Python OpenCV基本功能怎么用本篇内容主要讲解“Pyth...
-
C++中怎么用OpenCV实现手势识别
C++中怎么用OpenCV实现手势识别本篇内容介绍了“C++中怎么...
-
python+opencv+selenium自动化登录邮箱并实现滑动验证功能
python+opencv+selenium自动化登录邮箱并实现滑动验证功能...
-
怎么使用opencv实现车道线检测
怎么使用opencv实现车道线检测这篇“怎么使用opencv实现车...
-
如何使用OpenCV和Python构建人员计数器
如何使用OpenCV和Python构建人员计数器这篇文章主要介绍了...
-
如何使用OpenCV-Python实现识别答题卡判卷功能
如何使用OpenCV-Python实现识别答题卡判卷功能这篇文章主...
-
OpenCV中怎么使用图像像素
OpenCV中怎么使用图像像素这篇文章主要介绍了OpenCV中怎么...
-
OpenCV学习方框滤波如何实现图像处理
OpenCV学习方框滤波如何实现图像处理这篇文章将为大家详细讲解有...
-
C++如何实现OpenCV方框滤波效果
C++如何实现OpenCV方框滤波效果这篇文章将为大家详细讲解有关...