当相机静止时,可以通过使用光流简单地通过将当前帧的前一帧减去来检测运动: OpenCV v2.4.9.0:运动分析和目标跟踪 OpenCV v3.0:运动分析和目标跟踪 但是,在我们自己的运动过程中如何检测移动的物体呢?当相机移动时,任何先前和当前帧之间的差异(减法)都会给我们背景的运动。此外,前景(电线杆、树木)将比背景(天空)移动得更快。如果我们查看所有偏离运动平均值的东西,我们会发现这些电线杆和树木,但它们实际上是静止的。当我们的相机移动时,如何检测其他物体的任何运动?
为了能够区分摄像机运动和场景运动,您需要同时估计两帧之间摄像机的姿态变化和这些帧中的场景几何形状。有一些方法可以实现这一点,您应该研究结构从运动(SfM)和基本矩阵估计。这些是复杂的方法,每种方法都有自己的问题(例如,在小的平移情况下,场景深度的估计可能不准确)。然而,您需要这种方法,因为只有在世界坐标系下观察运动时,移动对象才能与场景区分开来,而不是在图像坐标系下观察。