OpenCV单目标跟踪:实现目标追踪的简易指南

这篇具有很好参考价值的文章主要介绍了OpenCV单目标跟踪:实现目标追踪的简易指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV单目标跟踪:实现目标追踪的简易指南

了解如何使用OpenCV库实现单目标跟踪。本指南介绍了OpenCV中主要的目标跟踪算法,包括CSRT、KCF、MIL、GOTURN和DaSiamRPN。通过选择初始目标区域并使用适当的跟踪器,在视频中准确地追踪目标位置。快速掌握单目标跟踪技术,适用于视频监控、自动驾驶和行人跟踪等应用场景。
opencv 目标追踪,OpenCV,opencv,目标跟踪,人工智能

目录:

  1. 什么是单目标跟踪?
  2. OpenCV中的目标跟踪器
  3. 实现单目标跟踪的步骤
  4. 完整的代码实现
  5. 结论

单目标跟踪:使用OpenCV实现目标跟踪

在本篇博客中,我们将使用OpenCV库实现单目标跟踪。目标跟踪是计算机视觉中的一个重要任务,它允许我们在视频中追踪一个特定的目标,并且在视频序列中跟踪它的位置。
opencv 目标追踪,OpenCV,opencv,目标跟踪,人工智能

什么是单目标跟踪?

单目标跟踪是一种计算机视觉技术,它允许我们在视频中选择一个初始区域,然后通过不断追踪目标来预测它在后续帧中的位置。这对于许多应用来说都非常有用,比如视频监控、自动驾驶、行人跟踪等。

OpenCV中的目标跟踪器

OpenCV是一个流行的开源计算机视觉库,它提供了各种目标跟踪算法。在本文中,我们将使用OpenCV的目标跟踪器来实现单目标跟踪。截至OpenCV 4.6.0版本,它提供了以下几种主要的目标跟踪算法:

  • TrackerCSRT : CSRT (Channel and Spatial Reliability Tracker)跟踪器
  • TrackerKCF: KCF (Kernelized Correlation Filters)跟踪器
  • TrackerMIL: MIL (Multiple Instance Learning)跟踪器
  • TrackerGOTURN: GOTURN (Generic Object Tracking Using Regression Networks)跟踪器
  • TrackerDaSiamRPN: DaSiamRPN (Deep Fully Convolutional Siamese Networks for Object Tracking)跟踪器
    在OpenCV 4.7.0版本中,还添加了一个名为TrackerNano的追踪器。

opencv 目标追踪,OpenCV,opencv,目标跟踪,人工智能

实现单目标跟踪的步骤

以下是实现单目标跟踪的步骤:

  1. 导入必要的库和头文件
  2. 创建一个目标跟踪器工厂类TrackerFactory,用于根据指定的名称创建相应的目标跟踪器对象
  3. 设置输入视频并选择初始目标区域
  4. 初始化目标跟踪器,并开始跟踪过程
  5. 在每一帧中更新跟踪器,并将跟踪结果显示在图像中
  6. 当按下ESC键时,退出跟踪过程

完整的代码实现

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

class TrackerFactory
{
public:
	 /*
     * 截至 opencv 4.6.0 版本
     * ["TrackerCSRT","TrackerKCF","TrackerMIL","TrackerGOTURN","TrackerDaSiamRPN"]
     * 其中 TrackerMIL、TrackerGOTURN、TrackerDaSiamRPN 属于 Main modules / Video Analysis / Object Tracking 模块。opencv 4.7.0 版本添加了一个 TrackerNano 追踪器。
     * TrackerCSRT、TrackerKCF 属于 Extra modules / Tracking API 模块。Extra modules 部分自行编译源代码。
     */
    static cv::Ptr<cv::Tracker> create(const std::string& name) {
        do {
            if(name.compare("TrackerCSRT") == 0) {
                return cv::TrackerCSRT::create();
            }
            if(name.compare("TrackerKCF") == 0) {
                return cv::TrackerKCF::create();
            }
            if(name.compare("TrackerMIL") == 0) {
                return cv::TrackerMIL::create();
            }
            if(name.compare("TrackerGOTURN") == 0) {
                return cv::TrackerGOTURN::create();// 需要下载 goturn.caffemodel 模型和 goturn.prototxt 模型定义文件。
            }
            if(name.compare("TrackerDaSiamRPN") == 0) {
                return cv::TrackerDaSiamRPN::create();// 需要下载模型 dasiamrpn_model.onnx 模型和dasiamrpn_kernel_r1.onnx、dasiamrpn_kernel_cls1.onnx参数配置文件。
            }
        } while(false);

        return nullptr;
    }
};

int main(int argc, char** argv) {
    cv::namedWindow("tracker", cv::WINDOW_NORMAL);
    cv::resizeWindow("tracker", {640, 480});

    cv::Rect roi;
    cv::Mat frame;

    // 创建一个跟踪器对象
    cv::Ptr<cv::Tracker> tracker = TrackerFactory::create("TrackerKCF");

    // 设置输入视频
    std::string video = "rtsp://admin:admin12345@192.168.1.108:554/Stream/Live/101";
    cv::VideoCapture cap(video);

    // 获取初始边界框
    cap >> frame;
    roi = selectROI("tracker", frame);

    // 如果没有选择ROI,则退出程序
    if(roi.width == 0 || roi.height == 0) return 0;

    // 初始化跟踪器
    tracker->init(frame, roi);

    // 开始跟踪过程
    printf("Start the tracking process, press ESC to quit.\n");

    for(;;) {
        // 从视频中获取一帧
        cap >> frame;

        // 如果没有更多图像,则退出
        if(frame.rows == 0 || frame.cols == 0) break;

        // 更新跟踪结果
        cv::TickMeter cost;
        cost.start();
        auto tracking = tracker->update(frame, roi);
        cost.stop();
        // 计算耗时时间
        printf("cost:%.2f tracking:%s", cost.getTimeMilli(), tracking ? "true" : "false");

        // 在图像中绘制跟踪的对象
        cv::rectangle(frame, roi, cv::Scalar(255, 0, 0), 3, 1);

        // 显示带有跟踪对象的图像
        cv::imshow("tracker", frame);

        // 按下ESC键退出
        if(cv::waitKey(1) == 27) break;
    }

    return 0;
}

注意:运行 TrackerDaSiamRPN 和 TrackerGOTURN 需要下载对应的模型文件。
dasiamrpn-model.onnx 模型文件:https://download.csdn.net/download/cheungxiongwei/88188476
goturn.caffemodel 模型文件:https://download.csdn.net/download/cheungxiongwei/88188478
下载后解压到程序同级目录,opencv 跟踪器会自动加载,你也可以在跟踪器 create 方法中指定参数来加载。

opencv TrackerKCF 跟踪器跟车

opencv TrackerKCF 跟踪器跟船

结论

本篇博文介绍了使用OpenCV实现单目标跟踪的方法。我们使用了OpenCV提供的目标跟踪器来追踪一个初始选择的目标在视频序列中的位置。目标跟踪在许多计算机视觉应用中都是非常重要的,希望本文能帮助你快速入门单目标跟踪的实现。如果你对此感兴趣,可以继续探索更多复杂的目标跟踪算法和应用。谢谢阅读!文章来源地址https://www.toymoban.com/news/detail-758418.html

到了这里,关于OpenCV单目标跟踪:实现目标追踪的简易指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-目标追踪-dlib

    2024年02月12日
    浏览(35)
  • opencv-目标追踪

    2024年02月12日
    浏览(32)
  • OpenCV图像处理——目标追踪

    图像处理总目录←点击这里 24.1.1、原理 目标检测 :运行之后按下s,通过鼠标对某个目标进行检测,然后点击空格或者回车 目标追踪 :opencv的八种追踪算法 BOOSTING Tracker:助推跟踪器 给定一个新的帧,分类器在前一个位置附近的每个像素上运行,并记录分类器的得分。对象

    2024年02月14日
    浏览(33)
  • 计算机毕业设计:python无人机目标识别+目标跟踪检测系统(OpenCV+YOLO实现) (包含文档+源码+部署教程)

    [毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 Python项目——毕业设计选题参考 2023年 - 2024年 最新计算机毕业设计 本科 选题大全 汇总 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。 p

    2024年04月28日
    浏览(54)
  • 【opencv】计算机视觉:实时目标追踪

    目录 前言 解析 深入探究 前言 目标追踪技术对于民生、社会的发展以及国家军事能力的壮大都具有重要的意义。它不仅仅可以应用到体育赛事当中目标的捕捉,还可以应用到交通上,比如实时监测车辆是否超速等!对于国家的军事也具有一定的意义,比如说导弹识别目标等

    2024年02月05日
    浏览(53)
  • 使用opencv的tracking模块跟踪目标

    OpenCV的tracking模块是一个功能强大的跟踪算法库,包含多种用于跟踪对象的算法。它可以帮助你在连续的视频帧中定位一个物体,例如人脸、眼睛、车辆等。 在OpenCV的tracking模块中,一些主要的跟踪算法包括: 稀疏光流(Sparse optical flow):例如Kanade-Lucas-Tomashi (KLT)特征跟踪算

    2024年02月06日
    浏览(40)
  • OpenCV快速入门:移动物体检测和目标跟踪

    在当今的数字化世界中,计算机视觉技术正在迅速发展并被广泛应用于各种场合。特别是在移动物体检测和目标跟踪领域,这项技术不仅对于安全监控系统至关重要,也在自动驾驶、交互式媒体、机器人技术等多个领域发挥着重要作用。 本文将介绍使用OpenCV进行移动物体检测

    2024年02月04日
    浏览(48)
  • 【案例分析】基于OpenCV的篮球目标检测追踪与进球预测

    目前,模式识别中的运动视觉分析处在高速发展阶段,诸如国家863计划的无标记仿人乒乓球机器人[1]等项目,均表现出该领域的发展前景。其核心是利用计算机视觉技术从图像序列中检测、跟踪、识别人或物,并对其行为进行理解与描述。 此外,对于飞行物体的轨迹追踪与预

    2024年02月04日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包