Opencv 之常用跟踪器汇总

Opencv 之常用跟踪器汇总

  • 总结一下opencv集成的一些跟踪算法:MIL、CSRT、KCF、GOTURN、Nano、DaSiamRPN,重点!(这些算法需要对opencv、opencv-contrib、cuda联合编译才可以使用)
  • 其中,关于深度学习跟踪算法所需要的模型文件免费下载链接:https://download.csdn.net/download/yohnyang/92568954
  • 多数为单目标跟踪算法,使用时需要给定一个ROI进行初始化跟踪器
  • 下边是详细算法介绍

1. 深度学习跟踪器 (Deep Learning Trackers)

1.1 TrackerDaSiamRPN

bash 复制代码
全称: Distractor-aware Siamese Region Proposal Network

原理: 孪生网络结构 + RPN网络 + 干扰物感知

特点:

高精度,平衡了速度与准确性

专门设计处理相似干扰物

实时性较好(30-50 FPS)

应用: 视频监控、无人机跟踪

1.2 TrackerNano

bash 复制代码
原理: 轻量级神经网络设计

特点:

专为移动/嵌入式设备优化

参数量少,推理速度快

在资源受限环境下表现优异

应用: 移动设备、边缘计算、IoT设备

1.3 TrackerGOTURN

bash 复制代码
全称: Generic Object Tracking Using Regression Networks

原理: 基于深度回归网络的离线训练

特点:

不需要在线学习,速度快

对GPU要求不高

但精度通常不如在线学习方法

应用: 实时应用场景

2. 传统/相关滤波跟踪器 (Traditional/CF Trackers)

2.1 TrackerKCF

bash 复制代码
全称: Kernelized Correlation Filters

特点:

速度极快(100+ FPS)

在简单场景下效果好

开源实现成熟

缺点: 对剧烈形变、遮挡处理不佳

2.2 TrackerCSRT

bash 复制代码
全称: Channel and Spatial Reliability Tracker

特点:

KCF的改进版本

引入通道和空间可靠性

精度更高,但速度稍慢

应用: 需要高精度的实时应用

2.3 TrackerMIL

bash 复制代码
全称: Multiple Instance Learning Tracker

特点:

使用正负样本包学习

对目标漂移有一定抵抗能力

相对稳定但速度较慢

3. 使用总结

3.1 OpenCV 使用示例

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>


int main()
{
    // 读取视频
    std::string path = "test.mp4";

    cv::VideoCapture cap(path);

    if (!cap.isOpened())
    {
        printf("cap open failes\n");
        exit(-1);
    }

    //cv::分别尝试不同的跟踪器
    cv::Ptr<cv::Tracker> tracker;

    try
    {
        //传统算法
        //tracker = cv::TrackerMIL::create();
        //tracker = cv::TrackerCSRT::create();
        //tracker = cv::TrackerKCF::create();

        //深度学习算法
        //tracker = cv::TrackerGOTURN::create();
        tracker = cv::TrackerNano::create();
        //tracker = cv::TrackerDaSiamRPN::create();
    }
    catch (const std::exception& e)
    {
        std::cout << "error :" << e.what() << std::endl;
    }
    cv::Mat frame;
    cap >> frame;
   
    cv::Rect2d bbox = cv::selectROI(frame, false);

    tracker->init(frame, bbox);

    cv::Rect box;
    while(true)
    {
        cap >> frame;
        if (frame.empty())
            break;

        auto t1 = cv::getTickCount();
        bool ret = tracker->update(frame, box);
        auto t2 = cv::getTickCount();

        auto tc = float(t2 - t1) / cv::getTickFrequency() * 1000;

        if (ret)
        {
            cv::rectangle(frame, box, cv::Scalar(255, 0, 0), 2, 1);
            cv::putText(frame, cv::format("cost: %.2f ms", tc), cv::Point(8, 18), cv::FONT_HERSHEY_SIMPLEX, 0.6, cv::Scalar(0, 188, 188), 1);

        }
        cv::imshow("Tracking", frame);
        if (cv::waitKey(1) == 27) break;
    }
    return 0;
}
相关推荐
HyperAI超神经5 分钟前
15亿参数挑战机器人控制,MiniCPM-RobotManip正式开源;覆盖文本/图/视频/动作序列,英伟达发布全模态模型Cosmos3-Edge
人工智能·深度学习·机器人·多模态·图像生成·具身智能·智能体
搞科研的小刘选手12 分钟前
【国际生态学协会主办】2026年生态环境与人工智能国际学术会议(ICAIEE 2026)
人工智能·生态环境·学术会议·会议推荐
笨鸟先飞,勤能补拙12 分钟前
AI 赋能网络安全领域深度剖析
网络·人工智能·windows·安全·web安全·网络安全·github
小鸟你好啊14 分钟前
搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼
人工智能·阿里云·云计算
Summer-Bright15 分钟前
深度 | Agent框架大洗牌:AutoGen退场后的新秩序
人工智能·ai·语言模型·ai软件
ThsPool19 分钟前
【遥感学习整理 02】ENVI遥感图像处理基础:从数据读取到遥感信息产品
图像处理·人工智能·学习
非凸科技29 分钟前
非凸智能APP
人工智能
土星云SaturnCloud41 分钟前
抽水蓄能设备智慧运营:基于土星云边缘计算实现机组全生命周期预测性维护
服务器·人工智能·ai·边缘计算
江畔柳前堤42 分钟前
系统的本质——从LTI系统到神经网络
人工智能·深度学习·神经网络·机器学习·计算机视觉·数据挖掘·语音识别
HackTwoHub1 小时前
轻量化AI渗透武器库|ARTEX自主攻防系统、资产梳理、漏洞挖掘、链路分析全流程智能化落地
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构