4

我是 OPENCV 的新手,所以如果我在这里缺少一些简单的东西,请多多包涵。

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

我希望从检测表面图案位移的光学鼠标的概念开始。但是我不清楚当车辆开始进入框架时如何处理背景。

我有兴趣尝试两种方法,但正在寻找进一步的输入。

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

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

提前致谢。

4

1 回答 1

6

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

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

如果你知道每个像素测量多少,你应该以每秒像素为单位......

脚步...

  1. 您可以使用帧区分...即从前一帧中减去当前帧并取绝对差...阈值差...这将您的移动汽车从背景分割出来...记住这些部分都在移动对象......所以如果你想要一辆汽车而不是一个移动的人,你可以使用形状特征,即高度与宽度的比率......将一个矩形拟合到分段部分,并在每一帧中执行相同的步骤。因此,在每一帧中,您都可以记录边界框前缘的坐标......使用帧数、帧率和边界框前沿的坐标来计算速度...

  2. 您可以使用 goodfeaturestotrack 和 open cv 的光流...这样您就可以区分快速移动和缓慢移动的物体...但要不断刷新 goodfeaturestotrack 为您提供的点,否则任何进入相机视图的新车都不会被更新...记录goodfeaturestotrack在每一帧中选取的那组点的位移..也就是运动物体的位移...用同样的方法计算速度...计算速度的基本思路是记录对象在相机视野中持续存在的帧数...如果您的相机是固定的,那么您的视野也是如此...因此重要的是您能够捕捉到对象的帧数...记住....opencv的光流适用于跟踪缓慢移动的物体或更理论上的特征点(由要跟踪的好特征确定..)算法工作的2个连续帧之间的位移较小...大算法的位移会产生一些错误的预测......这就是为什么图像平面中的速度很重要......至少在定性上你应该对它有所了解......

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

于 2012-09-16T15:39:46.337 回答