引用了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;
}
下面是工程檔案組成:
