OpenCV使用扩展模块中的TrackerKCF实现视频中单对象跟踪
2023-09-14 09:05:26 时间
1、概述
案例:使用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区域不会随着目标对象的大小变化而变化。
2、代码示例
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();
}
3、演示图像
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- Opencv学习笔记(九)光流法
- OpenCV-Python学习(8)—— OpenCV 颜色表操作
- ubuntu配置opencv环境_opencv的安装与配置详细教程
- opencv remap matlab,如何使用OpenCV的remap函数?
- python使用opencv如何保存图片_OpenCV Python 保存图片
- OpenCV趣味应用系列--grabCut人物背景替换
- OpenCV这么简单为啥不学——1.3、图像缩放resize函数
- OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
- OpenCV这么简单为啥不学——1.5、解决putText中文乱码问题
- 独家|OpenCV 1.5 利用OpenCV叠加(混合)两幅图像
- Linux 安装OpenCV简易指南(linux安装opencv)