/*Copyright 2018 BIG VISION LLC ALL RIGHTS RESERVED*/#include <opencv2/opencv.hpp>#include <opencv2/tracking.hpp>using namespace cv;using namespace std;vector<string> trackerTypes = {"BOOSTING", "MIL", "KCF", "TLD", "MEDIANFLOW", "GOTURN", "MOSSE", "CSRT"};// create tracker by namePtr<Tracker> createTrackerByName(string trackerType){Ptr<Tracker> tracker;if (trackerType == trackerTypes[0])tracker = TrackerBoosting::create();else if (trackerType == trackerTypes[1])tracker = TrackerMIL::create();else if (trackerType == trackerTypes[2])tracker = TrackerKCF::create();else if (trackerType == trackerTypes[3])tracker = TrackerTLD::create();else if (trackerType == trackerTypes[4])tracker = TrackerMedianFlow::create();else if (trackerType == trackerTypes[5])tracker = TrackerGOTURN::create();else if (trackerType == trackerTypes[6])tracker = TrackerMOSSE::create();else if (trackerType == trackerTypes[7])tracker = TrackerCSRT::create();else {cout << "Incorrect tracker name" << endl;cout << "Available trackers are: " << endl;for (vector<string>::iterator it = trackerTypes.begin() ; it != trackerTypes.end(); ++it)std::cout << " " << *it << endl;}return tracker;}// Fill the vector with random colorsvoid getRandomColors(vector<Scalar> &colors, int numColors){RNG rng(0);for(int i=0; i < numColors; i++)colors.push_back(Scalar(rng.uniform(0,255), rng.uniform(0, 255), rng.uniform(0, 255)));}int main(int argc, char * argv[]){cout << "Default tracking algoritm is CSRT" << endl;cout << "Available tracking algorithms are:" << endl;for (vector<string>::iterator it = trackerTypes.begin() ; it != trackerTypes.end(); ++it)std::cout << " " << *it << endl;// Set tracker type. Change this to try different trackers.string trackerType = "CSRT";// set default values for tracking algorithm and videostring videoPath = "videos/run.mp4";// Initialize MultiTracker with tracking algovector<Rect> bboxes;// create a video capture object to read videoscv::VideoCapture cap(videoPath);Mat frame;// quit if unabke to read video fileif(!cap.isOpened()){cout << "Error opening video file " << videoPath << endl;return -1;}// read first framecap >> frame;// draw bounding boxes over objects// selectROI's default behaviour is to draw box starting from the center// when fromCenter is set to false, you can draw box starting from top left cornerbool showCrosshair = true;bool fromCenter = false;cout << "\n==========================================================\n";cout << "OpenCV says press c to cancel objects selection process" << endl;cout << "It doesn't work. Press Escape to exit selection process" << endl;cout << "\n==========================================================\n";cv::selectROIs("MultiTracker", frame, bboxes, showCrosshair, fromCenter);// quit if there are no objects to trackif(bboxes.size() < 1)return 0;vector<Scalar> colors;getRandomColors(colors, bboxes.size());// Create multitrackerPtr<MultiTracker> multiTracker = cv::MultiTracker::create();// initialize multitrackerfor(int i=0; i < bboxes.size(); i++)multiTracker->add(createTrackerByName(trackerType), frame, Rect2d(bboxes[i]));// process video and track objectscout << "\n==========================================================\n";cout << "Started tracking, press ESC to quit." << endl;while(cap.isOpened()){// get frame from the videocap >> frame;// stop the program if reached end of videoif (frame.empty()) break;//update the tracking result with new framemultiTracker->update(frame);// draw tracked objectsfor(unsigned i=0; i<multiTracker->getObjects().size(); i++){rectangle(frame, multiTracker->getObjects()[i], colors[i], 2, 1);}// show frameimshow("MultiTracker", frame);// quit on x buttonif (waitKey(1) == 27) break;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。