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个外侧圆绿色,圆心红色被成功检测到;

OpenCV霍夫圆变换cv2.HoughCircles()的示例分析

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

OpenCV霍夫圆变换cv2.HoughCircles()的示例分析

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

OpenCV霍夫圆变换cv2.HoughCircles()的示例分析

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

发布于 2021-07-29 21:58:21
收藏
分享
海报
0 条评论
233
上一篇:基于Java8并行流有哪些需要注意的地方 下一篇:支持python分布式计算框架Ray的示例分析
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码