OpenCV使用相机进行连续速度测量



我是OPENCV的新手,如果这里缺少一些简单的东西,请耐心等待。

我正在尝试开发一个基于摄像头的系统,该系统可以在以下假设下连续输出车辆的速度:1.摄像机水平放置,车辆经过摄像机镜头3至5英尺附近。2.速度不超过30KM/Hrs

我希望从光学鼠标的概念开始,它可以检测表面图案中的位移。然而,当车辆开始进入车架时,我不清楚如何处理背景。

有两种方法我对实验感兴趣,但正在寻找进一步的投入。

  1. 当车辆进入框架并与背景分离时检测车辆
  2. 使用cvGoodFeaturesToTrack查找车辆上的点
  3. 在下一帧中跟踪该点&使用Lucas_Kanade金字塔函数计算光流的水平速度
  4. 重复

请提出更正和修正建议。此外,我请求更有经验的成员帮助我高效地编写此过程,因为我不知道在这里使用哪些函数是最正确的。

提前谢谢。

希望您使用的是一个20帧/秒到30帧/秒的简单相机,并且您的相机垂直于道路但远离道路…物体,即您的汽车在图像平面中的最大速度为8ms-1。。。在你使用的镜头的帮助下,计算汽车在图像平面中的速度。。。

( speed in object plane / distance of camera from road ) = ( speed in image plane / focal length )

如果你知道每个像素的测量值,你应该得到每秒像素数。。。

步骤。。。

  1. 您可以使用帧区分。。。即从上一帧减去当前帧,并取绝对差。。。阈值差异。。。这把你行驶中的汽车从后场分割开来。。。记住这个分段所有移动的物体。。。所以,如果你想要一辆车,而不是一个移动的人,你可以使用形状特征,即高宽比。。。将一个矩形拟合到分割的部分,并在每个框架中执行相同的步骤。所以在每一帧中,你都可以记录边界框前缘的坐标。。。这样,当一辆车进入视野直到离开视野时,你就知道这辆车持续了多久。。。利用帧数、帧速率和边界框前缘的坐标来计算速度。。。

  2. 你可以使用良好的特征跟踪和开放式cv的光流…这样你就可以区分快速移动和慢速移动的物体。。。但要不断刷新goodfeaturestotrack给你的要点,否则任何进入摄像头视野的新车都不会更新。。。记录goodfeaturestotrack在每帧中拾取的点集的位移。。那就是运动物体的位移。。。用同样的方法计算速度计算速度的基本思想是记录对象在相机视野中保持的帧数。。。如果你的相机是固定的,你的视野也是固定的因此,重要的是你能捕捉到对象的帧数。。。回想起opencv的光流用于跟踪缓慢移动的物体,或者更理论地说,特征点(由要跟踪的良好特征确定)在2个连续帧之间的位移较小,以便算法工作。。。大位移会有一些错误的预测算法。。。这就是为什么图像平面中的速度很重要。。至少在质量上你应该了解它…

注意:这两种方法都用于单个对象跟踪。。对于多个对象跟踪,您需要进行一些修改。。。但是,您可以从以下任一方法开始。。。我认为它会起作用的。。

最新更新