【问题标题】:OpenCV HoughCircles occasionally returning [0. 0. 0.]OpenCV HoughCircles 偶尔会返回 [0. 0. 0.]
【发布时间】:2019-05-01 01:30:49
【问题描述】:

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

这是我的函数调用:

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

我想知道为什么它要识别一些我什至在imshow() 上都看不到的非常小的东西(它总是在 (0,0) 附近完全变黑;几十行和一列除了zeros),那么为什么它总是在(0,0)处,半径为0?当我提供minRadius=5 时,我看不到它会如何返回半径为 0 的圆。我不相信这实际上是一个有效的检测。有时这需要执行数百次才能发生,但似乎我可以通过快速移动相机旁边的东西(例如我的手)来触发它。

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

【问题讨论】:

  • 我最近发现,在更新了包括opencv在内的一些python包之后,当没有检测到圆圈时,HoughCircles函数开始返回(0,0,0)而不是None。我没有找到任何原因或文档,解决方案是明确处理此返回值。
  • 谢谢,@Mick,奇怪的是我两个都得到了。我正在使用 3.4.3;您更新到哪个版本?
  • 我目前安装了opencv-python 3.4.3.18。
  • "但找不到 Python 包装器" -- 所有包装器的实现都是在构建期间自动生成的。使用 Python 支持构建 OpenCV,然后搜索 pyopencv_*.h
  • 无法在 Windows 上重现 - 标准 3.4.3 构建仍然返回 None(只是在完全黑色的输入上调用它)。

标签: python opencv


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我会将此标记为正确答案,因为它似乎是一个可行的根本原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多