千家信息网

opencv3/C++如何使用Tracker实现目标跟踪

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了opencv3/C++如何使用Tracker实现目标跟踪,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介MIL:
千家信息网最后更新 2026年11月03日opencv3/C++如何使用Tracker实现目标跟踪

这篇文章主要介绍了opencv3/C++如何使用Tracker实现目标跟踪,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

简介

MIL: TrackerMIL 以在线方式训练分类器将对象与背景分离;多实例学习避免鲁棒跟踪的漂移问题.

OLB: TrackerBoosting 基于AdaBoost算法的在线实时对象跟踪.分类器在更新步骤中使用周围背景作为反例以避免漂移问题.

MedianFlow: TrackerMedianFlow 跟踪器适用于非常平滑和可预测的运动,物体在整个序列中可见.

TLD: TrackerTLD 将长期跟踪任务分解为跟踪,学习和检测.跟踪器在帧之间跟踪对象.探测器本地化所观察到的所有外观,并在必要时纠正跟踪器.学习估计检测器的错误并进行更新以避免再出现这些错误.追踪器能够处理快速运动,部分遮挡,物体缺失等情况.

KCF: TrackerKCF 使用目标周围区域的循环矩阵采集正负样本,利用脊回归训练目标检测器,并成功的利用循环矩阵在傅里叶空间可对角化的性质将矩阵的运算转化为向量的Hadamad积,即元素的点乘,大大降低了运算量,提高了运算速度,使算法满足实时性要求.

部分相关API:

TrackerMIL

static Ptr create(const TrackerMIL::Params ¶meters); CV_WRAP static Ptr create();

struct CV_EXPORTS Params { PARAMS(); //采样器的参数 float samplerInitInRadius; //初始收集正面实例的半径 int samplerInitMaxNegNum; //初始使用负样本 float samplerSearchWinSize; //搜索窗口的大小 float samplerTrackInRadius; //在跟踪期间收集正面实例的半径 int samplerTrackMaxPosNum; //在追踪期间使用正面样本 int samplerTrackMaxNegNum; //在跟踪期间使用的负样本 int featureSetNumFeatures; //特征 void read(const FileNode&fn); void write(FileStorage&fs)const; };

TrackerBoosting

static Ptr create(const TrackerBoosting::Params ¶meters); CV_WRAP static Ptr create();

struct CV_EXPORTS Params{ PARAMS(); int numClassifiers; //在OnlineBoosting算法中使用的分类器的数量 float samplerOverlap; //搜索区域参数 float samplerSearchFactor; //搜索区域参数 int iterationInit; //初始迭代 int featureSetNumFeatures; //特征 //从文件读取参数 void read(const FileNode&fn); //从文件写入参数 void write(FileStorage&fs)const; };

示例

首先获取视频的第一帧,通过点击左键框选选择要跟踪的目标,点击右键确认并使用MIL开始跟踪.(从实际情况看来,算法对过程中有遮挡的情况跟踪能力较差.)

(环境:Ubuntu16.04+QT5.8+opencv3.3.1)

#include #include #include #include using namespace cv;void draw_rectangle(int event, int x, int y, int flags, void*);Mat firstFrame;Point previousPoint, currentPoint;Rect2d bbox;int main(int argc, char *argv[]){ VideoCapture capture; Mat frame; frame = capture.open("/home/w/mycode/QT/img/runners.avi"); if(!capture.isOpened()) { printf("can not open ...\n"); return -1; } //获取视频的第一帧,并框选目标 capture.read(firstFrame); if(!firstFrame.empty()) { namedWindow("output", WINDOW_AUTOSIZE); imshow("output", firstFrame); setMouseCallback("output", draw_rectangle, 0); waitKey(); } //使用TrackerMIL跟踪 Ptr tracker= TrackerMIL::create(); //Ptr tracker= TrackerTLD::create(); //Ptr tracker = TrackerKCF::create(); //Ptr tracker = TrackerMedianFlow::create(); //Ptr tracker= TrackerBoosting::create(); capture.read(frame); tracker->init(frame,bbox); namedWindow("output", WINDOW_AUTOSIZE); while (capture.read(frame)) { tracker->update(frame,bbox); rectangle(frame,bbox, Scalar(255, 0, 0), 2, 1); imshow("output", frame); if(waitKey(20)=='q') return 0; } capture.release(); destroyWindow("output"); return 0;}//框选目标void draw_rectangle(int event, int x, int y, int flags, void*){ if (event == EVENT_LBUTTONDOWN) { previousPoint = Point(x, y); } else if (event == EVENT_MOUSEMOVE && (flags&EVENT_FLAG_LBUTTON)) { Mat tmp; firstFrame.copyTo(tmp); currentPoint = Point(x, y); rectangle(tmp, previousPoint, currentPoint, Scalar(0, 255, 0, 0), 1, 8, 0); imshow("output", tmp); } else if (event == EVENT_LBUTTONUP) { bbox.x = previousPoint.x; bbox.y = previousPoint.y; bbox.width = abs(previousPoint.x-currentPoint.x); bbox.height = abs(previousPoint.y-currentPoint.y); } else if (event == EVENT_RBUTTONUP) { destroyWindow("output"); }}

实验对比发现:KCF速度最快,MedianFlow的速度也较快,对于无遮挡情况跟踪效果较好;TLD对部分遮挡处理的效果最好,处理时间相对较慢.

部分遮挡处理效果

MIL对部分遮挡的处理效果:

opencv::Tracker Algorithms

感谢你能够认真阅读完这篇文章,希望小编分享的"opencv3/C++如何使用Tracker实现目标跟踪"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

跟踪 目标 参数 部分 处理 情况 效果 样本 算法 篇文章 学习 区域 实例 对象 正面 矩阵 速度 跟踪器 分类 搜索 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 艾特科技互联网 新浪科技互联网 佩信高科技互联网 济南和联互联网科技有限公司 科技与互联网的利与弊 互联网科技产品 中盈科技互联网信息有限公司 全球顶尖互联网科技公司 洛阳昕诺飞互联网科技有限公司 企晟互联网信息科技有限公司 互联网科技创新的路径 四川互联网展示科技馆设计 半导体是互联网高科技吗 新氧科技和美国互联网有关系吗 互联网时代高科技布局 杭州融税互联网科技有限公司 数字科技和互联网金融哪个好 银川新华互联网科技学校招聘 如何强化互联网金融科技 上海卓越科技互联网 科技信息互联网 浩特互联网科技 狮子座互联网科技有限公司 奔汉互联网科技 一五八零互联网科技 洛阳共同富裕互联网科技有限公司 众安科技工业互联网合作 美国互联网科技实力 互联网科技创业有什么好项目
0