我已遵循OpenCV的教程here在Raspberry Pi上进行圆圈检测。这是我使用的代码,除了不同的图像外,它与本教程的代码相同。
import cv2
import numpy as np
img = cv2.imread('watch.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[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('image',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
然后,当我运行脚本时,这就是我所看到的
这是原始图像
是什么导致这种情况发生?
先感谢您!
编辑:
最佳答案
Hough Circle Transform生成的大量圆圈是由中心检测阈值的较低值引起的,在您的情况下,这是param2
中的cv2.HoughCircles
。
因此,请尝试增加param2
的值以避免错误的检测。
您也可以调整minRadius
和maxRadius
值以获得更好的结果。
编辑:
我刚刚尝试了here的示例,仅将param2
更改为10
,将minRadius
更改为30
,将maxRadius
更改为50
。结果足够好:
上面链接中的示例是用C++编写的,但是您可以比较参数和函数调用的顺序以完善自己的算法。
关于python - OpenCV霍夫圆变换不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38645772/