首页 > 解决方案 > OpenCV HoughCircles 偶尔会返回 [0. 0. 0.]

问题描述

我在HoughCircles()Raspberry Pi 上运行 HSV 过滤 PiCamera 提要以检测粉红色球。有时我会得到一个与 ndarray[[[0. 0. 0.]]]相同的结果np.zeros(shape=(1, 1, 3)),而不是None在相机视图中没有圆形时的预期结果。我查看了文档,但没有看到任何关于它为什么会返回这个的细节。我还查看了源代码,但找不到C++ 代码的 Python 包装器,这似乎也对我没有帮助。

这是我的函数调用:

circles = cv2.HoughCircles(frame, cv2.HOUGH_GRADIENT, 3, frame.shape[0] / 4, param1=220, param2=110, minRadius=5)

我想知道为什么如果它正在做一些事情,比如识别一些我什至看不到的非常小的东西imshow()(它总是在 (0,0) 周围完全是黑色的;几十行和列除了零之外什么都没有),那么为什么是它总是在 (0,0) 处,半径为 0?当我提供minRadius=5. 我不相信这实际上是一个有效的检测。有时这需要数百次执行才能发生,但似乎我可以通过快速移动相机的某些东西(例如我的手)来触发它。

任何想法为什么会发生这种情况,也许其他人经历过这种情况?

标签: pythonopencv

解决方案


我在 C++ 中遇到了一个相同的问题,其中 HoughCircles() 将为某些图像返回一个包含单个 [0,0,0] 的列表。这被发现是由 OpenCV 中的 RemoveOverlaps() 方法中的错误引起的,并将在未来的版本中修复(例如 3.4.7、4.2.0 等)。

如果您想了解更多信息,请查看我写的错误报告: https ://github.com/opencv/opencv/issues/14432


推荐阅读