使用opencv检测水面上的白球的最佳方法是什么?

What's the best way to detect a white ball on the water surface by using opencv?

我在水面上放了一个白色的小球。风使白球在水中移动。我想使用 opencv 来检测和跟踪 ball.Because 背景(水面)是单色的,球也是单色的。我只是使用 hsv 中的颜色并设置一个阈值来检测白色(球)。我认为这种方式比 camshift、tld、光流法更容易、更好。现在我有一个问题,我检测到白色来找到球,但有时风很大,水波会随着球而起。就像下面的图片

hsv 中的波浪也有白色。所以当我使用 findcontours 获取球的边缘时,我将获得包括球和波浪的边缘。我试过用 erode 和 dilate 来去除 wave noise.But 我得不到好的结果。我现在不知道。你能帮我看看我怎样才能更好地消除波浪吗? 我不确定仅使用颜色来检测球是否是我的最佳选择。也许我应该尝试 camshift、tld、光流法?你能告诉我你的想法吗?提前致谢!!

目前我想不出一个完美的解决方案,但我可以建议你一个至少可以帮助你误检球的策略。

整个场景的光流可以帮助您找到所有像素或选定关键点的速度。一旦找到场景的速度,就需要设置一个阈值,以便在场景的速度更高时停止检测球。

Waves -> water moves fast-> pixels velocity increases (in x or y direction) -> optical flow will tell you this situation -> 用HSV方法停止球检测。

换句话说,只有在水流速度不太快并且您可以使用光流法知道速度的情况下,才应用现有的基于 HSV 方法的球检测方法。