c++ - 通过消除持续运动进行运动检测

标签 c++ opencv image-processing motion-detection

我正在尝试在 OpenCV C++ 中实现运动检测。我尝试了各种方法,如 MOG、光流,效果很好,但有没有一种方法可以消除场景中的持续运动,如持续的风扇运动等?我想到了 opencv accumuateWeighted() 但不确定它是否有效。我们有更好的方法吗?

最佳答案

我还没有完全可靠的解决方案,而且我也没有任何视频处理经验,但我会把我的想法放在现在我遇到这个问题之前:

首先考虑视频中的几对连续图像帧并将它们转换为灰度以进行更稳健的比较。

光栅扫描图像对,通过比较对应的图像对找出图像对的差异。 生成的图像将给出成对图像中存在变化的像素位置,将这些像素位置聚类并在它们上面制作边界框。这样这个边界框区域将标记一个正在平移/旋转的对象。

现在我们已经对几对应用了上述图像差异操作。我们将在每个图像对差异中有旋转/平移边界框。 现在检查每个结果图像的差异,像素上有边界框。

将差异图像中的边界框中心位置与其他差异图像进行比较。如果在所有差异图像中存在其中心位置有非常轻微变化的边界框,则该边界框中包含的对象将具有旋转运动,如扇形、叶子和其余边界框将代表视频中的实际平移对象。

关于c++ - 通过消除持续运动进行运动检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47131478/

相关文章:

c++ - 'constexpr' 标记的变量和静态存储持续时间的变量是否都可以通过具有推导指南的类类型来存储?

C++:std::istream 读取及其对 std::streambuf 的调用下溢

c++ - _GetExceptDLLinfo 是什么?

python - 在Windows上同时安装Python 2和Python 3时,如何为Python 2安装OpenCV

c++ - 使用 compose 全景图而不使用estimateTransform

python-3.x - 如何使用openCV清除图像中的数字?

java - 相机没有返回我拍摄的图像

algorithm - 并行化霍夫变换算法的最佳方法是什么?

c++ - 使对象恰好位于屏幕中央

python - 来自分割的 3d 骨架