这篇文章主要介绍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()的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!