C++ 基于opencv的目标跟踪

C++ 基于opencv的目标跟踪,c++,opencv,C++,Opencv,我计划做一个项目,涉及从CCTV摄像机的视频输入跟踪各种物体(包括人、车辆等)。我打算使用OpenCV。实现应该能够容忍遮挡,并且应该能够识别和继续跟踪对象,即使它们退出帧并在一段时间后重新进入。此外,帧中的新条目应自动识别和跟踪,我需要提取对象随时间变化的位置。由于有很多选择,我实际上感到困惑。有人能提出最好的前进方向吗。我已经尝试了以下方法: 我尝试使用opencv的跟踪API,并尝试了以下所有算法:MIL、TLD、BOOSTING、MEDIANFLOW。但它们似乎都不够准确 我也知道卡尔

我计划做一个项目,涉及从CCTV摄像机的视频输入跟踪各种物体(包括人、车辆等)。我打算使用OpenCV。实现应该能够容忍遮挡,并且应该能够识别和继续跟踪对象,即使它们退出帧并在一段时间后重新进入。此外,帧中的新条目应自动识别和跟踪,我需要提取对象随时间变化的位置。由于有很多选择,我实际上感到困惑。有人能提出最好的前进方向吗。我已经尝试了以下方法:

  • 我尝试使用opencv的跟踪API,并尝试了以下所有算法:MIL、TLD、BOOSTING、MEDIANFLOW。但它们似乎都不够准确
  • 我也知道卡尔曼滤波器。但它无法处理识别先前从不同位置重新进入帧的对象的问题。我更喜欢包含此功能的解决方案
  • 我试过Camshift。但它需要指定强度范围。由于CCTV安装的实际设置事先未知,因此这也不是一个选项
  • 我还查找了HOGDescriptor类。但是它没有提供一个直接跟踪的工具,对吗?我的意思是只执行检测

有没有比上面提到的更适合当前问题的更好的解决方案?有没有办法提高跟踪算法的准确性?有没有办法改进我已经考虑过的解决方案?请帮助解决我的困惑。

您基本上是在寻找完美的跟踪算法:)如果您想知道哪种算法最适合您的需求,您可以查看以下基准:。但实施起来可能很困难

另一方面,我想你需要实时性能。在这种情况下,你也应该检查我的答案

我也知道卡尔曼滤波器。但它无法处理识别先前从不同位置重新进入帧的对象的问题。我更喜欢包含此功能的解决方案

没有这样的预测算法。你必须检查每一个可能的边界位置来再次定位目标

我试过Camshift。但它需要指定强度范围。由于CCTV安装的实际设置事先未知,因此这也不是一个选项

既然你实际上想要最好的算法,也许你不会喜欢camshift。基于直方图的算法对相似的目标(或具有相似颜色的任何对象,有一些基于直方图并尝试处理形状的算法(这是一个很好的例子)。但是,我认为它不会满足您的要求

我还查找了HOGDescriptor类。但是它没有提供一个直接跟踪的工具,对吗?我的意思是只执行检测

实际上,要检测目标,您需要首先对其进行训练(或者(例如),您可以使用对象性算法来检测场景中的显著对象)。这意味着你必须针对每一个可能的目标进行训练。因此,如果您检测到以前训练过的一个目标,您可以尝试在每一帧中检测相同的目标。您可以使用卡尔曼滤波器缩小搜索范围并获得更好的结果

总之,从基准开始。找到适合您的最佳算法

顺便说一下,这是当今计算机视觉算法的发展趋势。也许最好的方法是通过这样或那样的方式进行深入学习

希望这有帮助,

戈汗

在不了解上下文的情况下回答这个问题并不简单。你能展示一些样品和你想要追踪的相关物体吗?@coincoin你可以想象一个户外闭路电视装置,比如在交通信号灯或公共街道上。这将涉及车辆、行人等。我正在进行几乎相同的项目作为起点。我发现了一个很好的例子,我想知道是否有比我提到的更好的算法。