《OpenCV3编程入门》学习笔记番外篇之目标跟踪object tracking

这里介绍一下使用OpenCV进行目标跟踪的方法,之前用过一点。OpenCV中目标跟踪的一些比较新的方法(比如MIL、KCF、TLD等)都在opencv_contrib库里,所以首先你需要安装它,详见Opencv3.1.0+opencv_contrib配置及使用SIFT测试 。
关于tracking这一块可参考Opencv的官网 Tracking API 、Introduction to OpenCV Tracker 。
如果只是想要测试下非常简单,官网都给了例程;要深入了解其原理,查看相关论文即可。关于其效果的话,看你的使用场合和怎么理解了。
这里贴一下我根据例程稍作修改的测试程序。
源码:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    // show help
    /*
    if (argc<2) {
        cout <<
            " Usage: tracker \n"
            " examples:\n"
            " example_tracking_kcf Bolt/img/%04d.jpg\n"
            " example_tracking_kcf faceocc2.webm\n"
            << endl;
        return 0;
    }
    */
    // declares all required variables
    Rect2d roi;
    Mat frame;
    // create a tracker object
    Ptr tracker = Tracker::create("KCF");
    // set input video
//  std::string video = argv[1];
    VideoCapture cap("dount.avi");
    // get bounding box
    cap >> frame;
    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);
        //quit on ESC button
        if (waitKey(1) == 27)break;
    }
    return 0;
}

你可能感兴趣的:(计算机视觉)