您的位置:首页 > 运维架构

(六)OpenCV视频分析与对象跟踪_09_扩展模块中的多对象跟踪

2020-03-06 21:35 351 查看

KCF:或者其它
KCF速度快,基本好用
MultiTracker

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/tracking.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
VideoCapture capture;
//capture.open("../path.mp4");
capture.open(0);
if (!capture.isOpened())
{
cout << "could not load video..." << endl;
return -1;
}
namedWindow("Video_demo", WINDOW_AUTOSIZE);

Mat frame;
capture.read(frame);//读取第一帧

vector<Rect> ROI;
//用鼠标框在"Video_demo"窗口里的frame上选ROI//窗口名,第一帧图片,存储需要被跟踪的对象
selectROIs("Video_demo",frame,ROI);//读取视频第一帧,选取多个跟踪目标,全部Enter确认后,Esc开始跟踪

MultiTracker trackers;//KCF多对象跟踪
vector<Rect2d> Object;
vector<Ptr<Tracker>> new_trackers;

for (auto i = 0; i < ROI.size(); i++)//为每一个跟踪对象绑定一个跟踪算法(KCF),作为trackers.add的参数
{
Object.push_back(ROI[i]);
new_trackers.push_back(TrackerKCF::create());
}
trackers.add(new_trackers, frame, Object);//在frame上跟踪ROI

while (capture.read(frame))
{
trackers.update(frame);
for (size_t i = 0; i < trackers.getObjects().size(); i++)
{
rectangle(frame, trackers.getObjects()[i], Scalar(0, 0, 255), 2, 8, 0);
}

imshow("Video_demo", frame);
char c = waitKey(100);
if (c == 27)
{
break;
}
}

capture.release();
waitKey(0);
return 0;
}

输出结果:(选择多个ROI)

  • 点赞
  • 收藏
  • 分享
  • 文章举报
丶小早 发布了90 篇原创文章 · 获赞 0 · 访问量 1080 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐