通过消除持续运动进行运动检测
Motion detection by eliminating constant movements
我正在尝试在 OpenCV C++ 中实现运动检测。我尝试了各种方法,如 MOG、光流,效果很好,但有没有一种方法可以消除场景中的持续运动,如持续的风扇运动等?我想到了 opencv accumuateWeighted()
但不确定它是否有效。我们有什么更好的方法吗?
我还没有完整的解决方案,而且我也没有任何视频处理经验,但我会把我的想法付诸实践,直到现在我遇到了这个问题:
首先考虑视频中的几对连续图像帧并将它们转换为灰度以进行更稳健的比较。
光栅扫描图像对,通过比较对应的图像对找出图像对的差异。
生成的图像将给出成对图像中存在变化的像素位置,将这些像素位置聚类并在它们上面制作边界框。这样这个边界框区域将标记一个 translating/rotation.
的对象
现在我们已经对几对应用了上述图像差异操作。我们将在每个图像对差异中有 rotating/translating 个边界框。
现在检查每个结果图像的差异,像素上有边界框。
将差异图像中的边界框中心位置与其他差异图像进行比较。如果在所有差异图像中都存在其中心位置有非常轻微变化的边界框,那么包含在该边界框中的对象将具有像扇形一样的旋转运动,叶子和剩余的边界框将代表视频中的实际平移对象。
我正在尝试在 OpenCV C++ 中实现运动检测。我尝试了各种方法,如 MOG、光流,效果很好,但有没有一种方法可以消除场景中的持续运动,如持续的风扇运动等?我想到了 opencv accumuateWeighted()
但不确定它是否有效。我们有什么更好的方法吗?
我还没有完整的解决方案,而且我也没有任何视频处理经验,但我会把我的想法付诸实践,直到现在我遇到了这个问题:
首先考虑视频中的几对连续图像帧并将它们转换为灰度以进行更稳健的比较。
光栅扫描图像对,通过比较对应的图像对找出图像对的差异。 生成的图像将给出成对图像中存在变化的像素位置,将这些像素位置聚类并在它们上面制作边界框。这样这个边界框区域将标记一个 translating/rotation.
的对象现在我们已经对几对应用了上述图像差异操作。我们将在每个图像对差异中有 rotating/translating 个边界框。 现在检查每个结果图像的差异,像素上有边界框。
将差异图像中的边界框中心位置与其他差异图像进行比较。如果在所有差异图像中都存在其中心位置有非常轻微变化的边界框,那么包含在该边界框中的对象将具有像扇形一样的旋转运动,叶子和剩余的边界框将代表视频中的实际平移对象。