#include<iostream>
#include<string>
#include<opencv2/opencv.hpp>
#include<opencv2/tracking.hpp>
using namespace std;
using namespace cv;
//单目标跟踪类型
vector<string> trackerTypes = {"KCF","MOSSE", "CSRT" };
//自定义一个返回单目标跟踪类型函数
Ptr<Tracker> createTrackerByName(string trackerType)
{
Ptr<Tracker> tracker;
if (trackerType==trackerTypes[0])
{
tracker = TrackerKCF::create();
}
if (trackerType==trackerTypes[1])
{
tracker = TrackerMOSSE::create();
}
if (trackerType==trackerTypes[2])
{
tracker = TrackerCSRT::create();
}
else
{
cout << "Incorrect tracker name" <<trackerType<< endl;
cout << "Available trackers are: " << endl;
for (vector<string>::iterator it = trackerTypes.begin(); it != trackerTypes.end(); ++it)
{
cout << " " << *it << endl;
}
}
return tracker;
}
//自定义随机颜色
void getRandomColors(vector<Scalar>&colors,int num)
{
RNG rng(0);
for (int i = 0; i < num; i++)
{
colors.push_back(Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)));
}
}
int main()
{
//初始化多目标追踪
//1、选择追踪类型
string trackerType = trackerTypes[2];
//2、选择读取视频获取第一帧图片
VideoCapture capture("video_003.avi");
if (!capture.isOpened())
{
cout << "Error opening video " << endl;
return -1;
}
Mat frame;
capture >> frame;
//3、定义目标框架
vector<Rect> bboxs;
// 在第一帧内确定对象框
/*
先在图像上画框,然后按ENTER确定画下一个框。按ESC退出画框开始执行程序
*/
selectROIs("MultiTracker",frame,bboxs,false);
if (bboxs.size() < 1)
{
return 0;
}
//4、定义保存框架颜色
vector<Scalar> colors;
getRandomColors(colors, bboxs.size());
//创建多目标跟踪器
Ptr<MultiTracker> multiTracker = MultiTracker::create();
for (int i = 0; i < bboxs.size(); i++)
{
multiTracker->add(createTrackerByName(trackerType),frame,Rect2d(bboxs[i]));
}
//开始处理视频图像
while (capture.read(frame))
{
//更新每一帧
bool ok = multiTracker->update(frame);
if (ok == true)
{
cout << "Tracking success" << endl;
}
else
{
cout << "Tracking failure" << endl;
}
//在图片中绘制矩形
for (int i = 0; i < multiTracker->getObjects().size(); i++)
{
rectangle(frame,multiTracker->getObjects()[i],colors[i],2,8);
}
// show frame
imshow("MultiTracker", frame);
// quit on x button
if (waitKey(1) == 27)
{
break;
}
}
return 0;
}
目标跟踪:多目标跟踪
最新推荐文章于 2022-04-19 07:00:00 发布