【发布时间】: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(只是在完全黑色的输入上调用它)。