OpenCV使用扩展模块中的TrackerKCF实现视频中单对象跟踪
一、概述
案例:使用TrackerKCF实现单对象跟踪,而TrackerKCF是扩展模块中的内容所以需要导入头文件:<opencv2/tracking.hpp>
实现步骤:
1.实例化VideoCapture
2.利用VideoCapture.open方法打开视频文件
3.VideoCapture.read读取视频的第一帧
4.利用selectROI选取ROI区域
5.实例化TrackerKFC
6.使用tracker->init方法初始化
7.while循环读取视频帧
8.tracker->update方法更新frame
9.使用rectangle绘制roi区域
10.显示最终frame
ps:此跟踪方法,的roi区域不会随着目标对象的大小变化而变化。
二、代码示例
Extend_KCF_Single_Object_Tracking::Extend_KCF_Single_Object_Tracking(QWidget *parent) : MyGraphicsView{parent} { this->setWindowTitle("扩展模块中的但对象跟踪"); QPushButton *btn = new QPushButton(this); btn->setText("选择视频"); connect(btn,&QPushButton::clicked,[=](){ choiceVideo(); }); } void Extend_KCF_Single_Object_Tracking::choiceVideo(){ path = QFileDialog::getOpenFileName(this,"请选择视频","/Users/yangwei/Downloads/",tr("Image Files(*.mp4 *.avi)")); qDebug()<<"视频路径:"<<path; showExtendKCFSingleObjectTracking(path.toStdString().c_str()); } void Extend_KCF_Single_Object_Tracking::showExtendKCFSingleObjectTracking(const char* filePath){ VideoCapture capture; capture.open(filePath); if(!capture.isOpened()){ qDebug()<<"无法加载视频文件"; return; } Mat frame; //读取第一帧 capture.read(frame); //选取ROI区域 Rect rect = selectROI(frame); if(rect.width<=0||rect.height<=0){ qDebug()<<"必须选择一个roi区域"; return; } //实例化KCF,ps:这属于高版本的4.5.5,低版本的创建方法不是这样的 Ptr<TrackerKCF> tracker = TrackerKCF::create(); //初始化ROI区域 tracker->init(frame,rect); //循环读取视频帧并跟踪 while(capture.read(frame)){ //更新frame tracker->update(frame,rect); //将roi区域绘制出来 rectangle(frame,rect,Scalar(0,255,0),3,8,0); //限制最终的跟踪frame imshow("frame",frame); int c = waitKey(1); if(c == 27){ break; } } capture.release(); }
三、演示图像
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探