当相机静止时,只需使用光流减去当前帧的前一帧即可轻松检测到运动:
OpenCV v2.4.9.0:Motion Analysis and Object Tracking
OpenCV v3.0:Motion Analysis and Object Tracking
但是如何检测我们自己运动过程中的运动物体呢?当相机移动时,前一帧和当前帧之间的任何差异(相减)都会给我们带来背景的移动。
此外,前景(电线杆、树木)会比背景(天空)移动得更快。如果我们观察所有偏离运动平均值的事物,我们会发现这些杆子和树木,但它们实际上是静止的。
当我们的相机移动时,如何检测其他物体的任何运动?
最佳答案
为了能够区分相机运动和场景运动,您需要同时估计相机在两帧之间的姿态变化以及这些帧中的场景几何形状。
有一些方法可以实现这一点,您应该研究运动结构 (SfM) 和基本矩阵估计。这些都是复杂的方法,每个都有自己的问题(例如,在小平移的情况下,场景深度的估计可能不准确)。但是,您需要这种方法,因为当您在世界坐标而不是图像坐标中查看移动对象的运动时,您的移动对象只会将它们自己与场景区分开来。
关于opencv - OpenCV 上移动相机的运动检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308057/