python - OpenCV HoughCircles 偶尔会返回 [0. 0. 0.]

标签 python opencv

我在 Raspberry Pi 上的 HSV 过滤 PiCamera 馈送上运行 HoughCircles() 以检测粉红色球。偶尔我会得到 [[[0 的 ndarray 结果。 0. 0.]]]np.zeros(shape=(1, 1, 3)) 相同,而不是预期的 None当相机 View 中没有圆形时。我查看了文档,但没有看到任何关于它为什么会返回这个的细节。我还查看了源代码,但找不到 C++ code 的 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 时,我看不出它如何返回半径为 0 的圆。我不相信这实际上是一个有效的检测。有时需要执行数百次才能发生这种情况,但似乎我可以通过快速移动相机旁的某物(例如我的手)来触发它。

知道为什么会发生这种情况,也许其他人已经经历过这种情况?

最佳答案

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

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

关于python - OpenCV HoughCircles 偶尔会返回 [0. 0. 0.],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001840/

相关文章:

python - 将列名转换为数字?

python - 如何在不等待 30 秒超时的情况下测试元素是否缺失

python - 我们如何通过双线性插值生成新的采样点?

algorithm - 自动设置Canny边缘检测算法参数的实用方法

python - 如何在flutter中使用starflut导入python包?

python - 加入守护线程

python - 从包含数字的文件生成二维列表的函数

python - 将字典转换为数据框,键作为列名,键的值作为数据框的列值

c++ - 如何将 cv::Mat & Img 复制到 unsigned char* img?opencv

c++ - 无法在 Windows 7 机器上的 Microsoft Visual C++ 2010 中运行 OpenCV