天天看點

VS2015+WIN10實作攝像頭KCF跟蹤

引用了KCF作者的源代碼,github開源位址https://github.com/joaofaro/KCFcpp

自己建立一個vs2015控制台程式,在win10系統下跑通,實作了框選區域跟蹤,而且特征可以選擇,避免了編譯opencv的痛苦。下一步,增加行人檢測代碼,實作實時行人檢測跟蹤。

不多廢話,直接源代碼:

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <sstream>

#include <algorithm>

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "kcftracker.hpp"

//#include <dirent.h>

using namespace std;

using namespace cv;

int main(int argc, char* argv[]) {

if (argc > 5) return -1;

bool HOG = true;

bool FIXEDWINDOW = false;

bool MULTISCALE = true;

bool SILENT = true;

bool LAB = false;

for (int i = 0; i < argc; i++) {

if (strcmp(argv[i], "hog") == 0)

HOG = true;

if (strcmp(argv[i], "fixed_window") == 0)

FIXEDWINDOW = true;

if (strcmp(argv[i], "singlescale") == 0)

MULTISCALE = false;

if (strcmp(argv[i], "show") == 0)

SILENT = false;

if (strcmp(argv[i], "lab") == 0) {

LAB = true;

HOG = true;

}

if (strcmp(argv[i], "gray") == 0)

HOG = false;

}

// Create KCFTracker object

KCFTracker tracker(HOG, FIXEDWINDOW, MULTISCALE, LAB);

// Frame readed

Mat frame;

// Tracker results

Rect result;

Rect2d roi;

string video = "D:\\Test\\test.mp4";

VideoCapture cap(0);//video);

cap >> frame;

roi = selectROI("tracker", frame);

if (roi.width == 0 || roi.height == 0)

return 0;

tracker.init(roi, frame);

printf("Start the tracking process\n");

for (;;)

{

cap >> frame;

if (frame.rows == 0 || frame.cols == 0)

break;

roi = tracker.update(frame);

rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);

imshow("tracker", frame);

if (waitKey(1) == 27)

break;

}

return 0;

}

下面是工程檔案組成:

VS2015+WIN10實作攝像頭KCF跟蹤