VS2015+opencv3.1 目标追踪, 采用"KCF"算法
#include "stdafx.h"
#include <opencv2/core/utility.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <cstring>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
// declares all required variables
Rect2d roi;
Mat frame;
// create a tracker object
//Ptr<Tracker> tracker = Tracker::create("KCF");
Ptr<Tracker> tracker = TrackerKCF::create("KCF");
// set input video
VideoCapture cap(0);
// get bounding box
cap >> frame; cvWaitKey(40);
imshow("tracker", frame); cvWaitKey(40);
roi = selectROI("tracker", frame);
//quit if ROI was not selected
if (roi.width == 0 || roi.height == 0)
return 0;
// initialize the tracker
tracker->init(frame, roi);
// perform the tracking process
printf("Start the tracking process, press ESC to quit.\n");
for (;; ) {
// get frame from the video
cap >> frame;
// stop the program if no more images
if (frame.rows == 0 || frame.cols == 0)
break;
// update the tracking result
tracker->update(frame, roi);
// draw the tracked object
rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);
// show image with the tracked object
imshow("tracker", frame); cv::waitKey(30);
//quit on ESC button
if (cvWaitKey(40) == 27)break;
}
return 0;
}