在计算了一帧的SIFT或ORB之后,如何实时跟踪视频中的对象
After having calculate SIFT or ORB on a frame, how to real time track the object in a video?
我主要想检测一个对象,然后在视频中跟踪它(逐帧)。
我可以用ORB或SIFT在第一帧上检测到它。但对于接下来的帧(或者说接下来的XX帧),我希望避免再次对所有关键点(ORB或SIFT)进行挖掘以再次检测。
考虑到我想在视频中实时跟踪它,我该怎么办?
一个常见的选项是使用补丁程序。这意味着您只需在上一帧关键点周围的8个像素区域中搜索关键点。您可以对关键点周围的区域执行cv::matchTemplate()
,而不是使用SIFT。
执行金字塔搜索有助于提高帧速率。首先以较低的比例进行搜索,如果找不到关键点,则将比例加倍。
如果patchtracker失败,因为图像移动太快,您只需要通过再次应用SIFT来重新初始化系统。我会用FAST而不是SIFT。您可以使用SIFT作为标记,然后使用FAST实时检测关键点,生成SIFT描述符。
检测和跟踪视频中的对象是一个非常大的主题,具体方法在很大程度上取决于您的应用程序。没有神奇的子弹!如果你实现了检测部分,如果你需要跟踪的对象是有色的,你可以尝试通过颜色(可能是HSV颜色空间)可能性的均值偏移进行跟踪,或者尝试模板匹配,或者。。你需要更加明确自己的需求。
您可以使用OpticalFlow进行简单跟踪,以下是执行此操作的步骤…
-
使用harris角点检测器或SIFT特征检测器来查找运动物体的角点。
-
将这些角点和上一个图像(在该图像中,您找到了要跟踪的对象的角点)以及下一个图像交给opticalflow函数,它将在接下来的图像中计算同一对象的角。。
以下是链接:
Link1
Link2
代码
注意:如果您正在解决遮挡处理、多人跟踪等问题,那么光靠OpticalFlow无法解决问题。为此,需要使用卡尔曼滤波器或粒子滤波器。。。
使用TLD或CLM可以实现近乎完美的实时跟踪。一旦你检测到感兴趣的物体,就使用边界框来启动捕食者跟踪。你可以在这里找到CMThttps://www.gnebehay.com/cmt/
和TLDhttps://www.gnebehay.com/tld/
- 从数据库实时显示QT c++中的数据
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 有没有办法使用 c++ 实时阅读文本?
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 将相机数据从服务器实时流式传输到客户端
- 将实时(非静态)放在qt(c ++)上
- 线程之间的实时数据共享
- 如何在实时应用程序中锁定线程
- OpenCV - 来自相机的实时馈送不流畅
- 如何提高 OpenCV 实时检测器应用程序的帧率?
- 使用 Opencv 将姿势值实时写入文本文件
- Firebase C++ Windows 上的实时数据库连接丢失
- 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?
- 媒体基金会:WavSink以比实时消耗率更快的速度处理音频-是否可以实时限制后台处理
- 如何实时捕获相机的视频?
- ROOT中的实时更新
- C# 的垃圾回收会给实时音频应用程序带来问题吗?
- 如何编写日志文件,以便可以使用记事本实时读取它以进行C++
- QChart实时性能
- C++从字节数组实时播放音频