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

时间:2015-07-11 07:24:39

标签: c++ opencv image-processing tracking video-processing

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

enter image description here

hsv中的波浪也有白色。所以当我使用findcontours获得球的边缘时,我将获得包括球和波的边缘。我曾尝试使用腐蚀和扩张来消除波浪噪声。但我无法获得良好的效果。我现在不知道。你能帮忙并告诉我如何以更好的方式移除波浪? 在我的情况下,我不确定只使用颜色来检测球是最好的选择。也许我应该尝试camshift,tld,光流法?你能告诉我你的想法吗?先谢谢!!

1 个答案:

答案 0 :(得分:1)

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

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

Waves - >水快速移动 - >像素速度增加(在x或y方向上) - >光流将告诉你这种情况 - >通过HSV方法停止球检测。

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