我已遵循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()

然后,当我运行脚本时,这就是我所看到的
python - OpenCV霍夫圆变换不起作用-LMLPHP

这是原始图像

python - OpenCV霍夫圆变换不起作用-LMLPHP

是什么导致这种情况发生?

先感谢您!

编辑:

python - OpenCV霍夫圆变换不起作用-LMLPHP

最佳答案

Hough Circle Transform生成的大量圆圈是由中心检测阈值的较低值引起的,在您的情况下,这是param2中的cv2.HoughCircles

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

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

编辑:

我刚刚尝试了here的示例,仅将param2更改为10,将minRadius更改为30,将maxRadius更改为50。结果足够好:

python - OpenCV霍夫圆变换不起作用-LMLPHP

上面链接中的示例是用C++编写的,但是您可以比较参数和函数调用的顺序以完善自己的算法。

关于python - OpenCV霍夫圆变换不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38645772/

10-10 23:03