OpenCV 连续速度测量使用相机

标签 opencv camera tracking

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

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

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

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

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

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

提前致谢。

最佳答案

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

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

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

步骤...

  1. 您可以使用帧差异化...即从前一帧中减去当前帧并取绝对差值...阈值差值...这会从背景中分割出移动中的汽车.. .记住这会分割所有移动的物体......所以如果你想要一辆车而不是一个移动的人你可以使用高度与宽度比的形状特征......将矩形适合分段部分并在每一帧中做同样的步骤。因此,在每一帧中,您都可以记录边界框前缘的坐标...这样,当汽车进入 View 直到它离开 View 时,您就知道汽车持续了多长时间...使用帧数、帧速率和边界框前缘的坐标来计算速度...

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

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

关于OpenCV 连续速度测量使用相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445416/

相关文章:

Android:前置摄像头的手势识别

java - 将 RGB2CMYK 方法从 c++ 移植到 java 时遇到问题

ios - 如何快速将灰度图像转换为二值图像?

ios - NSCameraUsageDescription 在 Xcode 9 中不起作用

javascript - 实时 Javascript 事件跟踪(Javascript 统计)

javascript - 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

python - ValueError : The truth value of an array with more than one element is ambiguous. 使用 a.any() 或 a.all()

android - 修剪 OpenCV 库

ios - 保存自定义相机捕获图像 iOS Xcode

python - 如何卡住 picamera 预览