- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在水面上放了一个白色的小球。风使白球在水中移动。我想使用 opencv 来检测和跟踪球。因为背景(水面)是单色的,球也是单色的。我只是使用 hsv 中的颜色并设置一个阈值来检测白色(球)。我认为这种方式比 camshift、tld、光流法更容易、更好。现在我有一个问题,我检测到白色来找到球,但有时风很大,水波会随着球而起。就像下面的图片一样
波在 hsv 中也有白色。所以当我使用 findcontours 获取球的边缘时,我将获得包括球和波浪的边缘。我曾尝试使用侵 eclipse 和扩张来消除波噪声。但我无法得到好的结果。我现在不知道。你能帮我看看我怎样才能更好地消除波浪吗?我不确定仅使用颜色来检测球是否是我的最佳选择。也许我应该尝试 camshift、tld、光流法?你能告诉我你的想法吗?提前致谢!
最佳答案
目前我想不出一个完美的解决方案,但我可以建议你一个至少可以帮助你误检球的策略。
整个场景的光流可以帮助您找到所有像素或选定关键点的速度。一旦找到场景的速度,就需要设置一个阈值,以便在场景的速度更高时停止检测球。
Waves -> water moves fast-> pixels velocity increases (in x or y direction) -> optical flow will tell you this situation -> 用HSV方法停止球检测。
换句话说,仅当水的移动速度不太快并且您可以使用光流法知道该速度时,才应用现有的基于 HSV 方法的球检测方法。
关于c++ - 使用opencv检测水面上的白球的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354596/
我是一名优秀的程序员,十分优秀!