OPENCV8个跟踪器的区别

  1. BOOSTING Tracker:基于用于支持Haar级联(AdaBoost)的机器学习的相同算法,但是像Haar级联一样,它已有十多年的历史了。该跟踪器运行缓慢,无法正常运行。仅出于遗留原因而感兴趣,并比较其他算法。 (最低OpenCV 3.0.0)
  2. MIL Tracker:比BOOSTING Tracker更好的准确性,但是报告失败的工作很差。(最低OpenCV 3.0.0)
  3. KCF Tracker:内核相关过滤器。比BOOSTING和MIL更快。与MIL和KCF相似,不能很好地处理完全遮挡。 (最低OpenCV 3.1.0)
  4. CSRT跟踪器:判别相关过滤器(具有通道和空间可靠性)。趋向于比KCF更准确,但速度稍慢。 (最低OpenCV 3.4.2)
  5. MedianFlow Tracker:很好地报告失败;但是,如果运动跳动太大(例如快速移动的对象或外观变化很快的对象),则模型将失败。 (最低OpenCV 3.0.0)
  6. TLD跟踪器:我不确定TLD跟踪器的OpenCV实现或实际算法本身是否存在问题,但是TLD跟踪器极容易出现假阳性。我不建议使用此OpenCV对象跟踪器。 (最低OpenCV 3.0.0)
  7. MOSSE Tracker:非常非常快。不如CSRT或KCF准确,但是如果您需要纯速度,则是一个不错的选择。(最低OpenCV 3.4.1)
  8. GOTURN Tracker:  OpenCV中唯一的基于深度学习的对象检测器。它需要其他模型文件才能运行(本文将不介绍)。我的初始实验表明,即使据说可以很好地处理查看更改,使用起来还是有些痛苦的(尽管我的初始实验并未证实这一点)。我将在以后的文章中尝试介绍它,但与此同时,请看一下Satya的文章。 (最低OpenCV 3.2.0)

我个人的建议是:

  • 当需要更高的对象跟踪精度并且可以忍受较慢的FPS吞吐量时,请使用CSRT
  • 当需要更快的FPS吞吐量但可以处理稍低的对象跟踪精度时,请使用KCF
  • 需要纯速度时使用MOSSE

 

萨蒂亚·马里克(Satya Mallick)在他的文章中还提供了有关这些对象跟踪器的其他信息。。

对象跟踪器已经在OpenCV 3中进行了积极的开发。这是跟踪器出现在哪些版本的OpenCV中的简要概述:

图2: OpenCV对象跟踪器以及它们出现在哪个版本的OpenCV中。如果您打算使用内置跟踪器,我建议使用OpenCV 3.4+。

注意:尽管在GitHub上遵循了本期中的说明并关闭了预编译头,但是我仍无法使OpenCV 3.1进行编译。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV中,可以通过跟踪对象的 `getObjects()` 函数来获取跟踪的数据。这个函数返回一个矩形向量,其中每个矩形表示一个跟踪跟踪的目标。可以遍历这个向量,以获取每个目标的位置和大小信息。 以下是一个获取跟踪数据的示例代码: ```cpp #include <opencv2/core.hpp> #include <opencv2/tracking.hpp> int main() { cv::Mat frame = cv::imread("example.jpg"); cv::Rect2d bbox(287, 23, 86, 320); // 初始跟踪框 // 创建一个KCF跟踪 cv::Ptr<cv::Tracker> tracker = cv::TrackerKCF::create(); // 初始化跟踪 tracker->init(frame, bbox); // 开始跟踪 while (true) { // 从视频中读取一帧 cv::Mat frame; if (!cap.read(frame)) break; // 更新跟踪 bool ok = tracker->update(frame, bbox); if (ok) { // 获取跟踪数据 std::vector<cv::Rect2d> objects; tracker->getObjects(objects); // 遍历目标列表 for (const auto& obj : objects) { // 在图像中绘制目标框 cv::rectangle(frame, obj, cv::Scalar(0, 255, 0), 2, 1); } } else { // 跟踪失败 cv::putText(frame, "Tracking failure detected", cv::Point(100, 80), cv::FONT_HERSHEY_SIMPLEX, 0.75, cv::Scalar(0, 0, 255), 2); } // 显示结果 cv::imshow("Tracking", frame); // 按下ESC键退出 if (cv::waitKey(1) == 27) break; } return 0; } ``` 在上面的示例代码中,我们使用了KCF跟踪对一张图像中的目标进行跟踪,并通过 `getObjects()` 函数获取了跟踪的数据。这个函数返回一个 `std::vector<cv::Rect2d>` 对象,其中每个矩形表示跟踪跟踪的一个目标。我们可以遍历这个向量,以获取每个目标的位置和大小信息,并在图像中绘制目标框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x12

下载和转换脚本可私信我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值