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

标签 python opencv geometry shape detection

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

然后,当我运行脚本时,这就是我所看到的
enter image description here

这是原始图像

enter image description here

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

先感谢您!

编辑:

enter image description here

最佳答案

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

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

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

编辑:

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

enter image description here

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

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

相关文章:

python - 在 Django url 中使用 Slugify

python - cv2.videoCapture(filename)动态分配文件名(已关闭)

python - Tensorflow:对数据进行切片并对每个切片应用卷积

python - 计算图像在屏幕上出现的次数

python - virtualenv下Pycharm subprocess.Popen python

python - 在 Swift 中运行 Python

c++ - 如何在opencv2.1中使用opencv2.3头文件

c++ - 检查 3D 点是否位于 3D 柏拉图立体内部?

javascript - 将外圈的导航与内圈的选定导航对齐

javascript - 我如何在 ThreeJS 中访问这些变量?