OpenCV 霍​​夫圆变换不工作

OpenCV Hough Circle Transform Not Working

我已经按照 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产生的大量圆是由于圆心检测阈值偏低造成的,在[=11=中为param2 ] 在你的情况下。

因此请尝试增加 param2 的值以避免错误检测。

您还可以调整 minRadiusmaxRadius 值以获得更好的结果。

编辑:

我刚刚尝试了 here 中的示例,仅将 param2 更改为 10,将 minRadius 更改为 30,将 maxRadius 更改为 50。结果还不错:

上面link中的示例是用C++编写的,但是您可以比较参数和函数调用的顺序来改进您自己的算法。