TLD(跟蹤學習檢測)是英國薩里大學的捷克學生Zdenek Kalal在其2010的一篇論文提出的實時性較好的單目標長時間跟蹤算法。其主頁上有相關的文章下載,源碼是從這里下載的,還可以找到安裝步驟,我先跑的是MATLAB+C的TLD程序自己按照步驟加上網站上別人的一些做法。
我的電腦軟件環境是:win7(32位)+VS2010+Matlab2013a+OpenCV2.4.4
下載並安裝完各個軟件。
是我下載的OpenCV圖標,解壓后果斷將命名改了一下,去掉了'-' '.'以及空格之類的,而且解壓后的路徑最好也如此,防止后面麻煩!
一、首先,安裝OpenCV244(OpenCV中文網站)時,得設置系統的環境變量,右擊我的電腦->屬性->高級->環境變量。如下圖:

我的安裝路徑是 'E:\OpenCV244\'
1. 用戶變量設置:由於我沒有中文網站上說的PATH,自己新建了一個,在其編輯界面的變量值中輸入路徑:E:\OpenCV244\opencv\build\x86\vc10\bin

同樣,新建OpenCV變量(好像可以自己定義),添加路徑:E:\OpenCV244\opencv\build
2. 系統變量設置:找到了Path,添加路徑:E:\OpenCV244\opencv\build\x86\vc10\bin
好了,這里重新啟動一下。
二、配置vs2010。告訴vs在什么地方找到OpenCV的頭文件和庫。在vs2010中新建一個Win32控制台應用程序的空項目,左擊下圖'屬性管理器',雙擊'Microsoft.Cpp.Win32.user',在彈出的界面上選中'VC++ 目錄'。


添加的路徑如下:
(1)可執行文件:E:\OpenCV244\opencv\build\x86\vc10\bin
(2)包含目錄:E:\OpenCV244\opencv\build\include
E:\OpenCV244\opencv\build\include\opencv
E:\OpenCV244\opencv\build\include\opencv2
(3)庫目錄:E:\OpenCV244\opencv\build\x86\vc10\lib
在'鏈接器'->'輸入'->'附加依賴項'中添加E:\OpenCV244\opencv\build\x86\vc10\lib中的文件名稱,如下圖。

至此,設置完畢。簡單測試一下,看OpenCV是否正常工作。如下圖,可以正常顯示任意圖片。got it!

三、 Matlab中運行TLD。前兩部只是環境准備。
(1) Setup mex compiler in Matlab。這是TLD文件包中README文件中的一句,做法就是在打開的Matlab的Command Window界面輸入命令'mex -setup'(注意mex后必須有空格),選擇編譯器,如下圖。

(2)Compilation of mex files。檢查'complie.m'的OpenCV路徑。
我的路徑設置為:
include = ' -IE:\OpenCV244\opencv\build\include -IE:\OpenCV244\opencv\build\include\opencv -IE:\OpenCV244\opencv\build\include\opencv2';
libpath = 'E:\OpenCV244\opencv\build\x86\vc10\lib\';
注意路徑的正確!
此時編譯,出現了【e:\program files\matlab\r2013a\extern\include\matrix.h(319) : error C4430: 缺少類型說明符 - 假定為 int。注意: C++ 不支持默認 int 】的錯誤提示。
參照csdn上的shanpohe的博客,注釋掉lk.cpp, fern.cpp, bb_overlap.cpp文件中的
#ifdef _CHAR16_T
#define CHAR16_T
#endif
編譯成功了!
(3)運行文件包中的'run_TLD.m'。算法跟蹤一輛行進中的摩托。
補充:vs2012+opencv249+win7的配置,幾乎一樣,再次跑通顯示程序。代碼如下
1 #include <opencv2/opencv.hpp>
2 #include <iostream>
3 using namespace cv;
4
5 void main()
6 {
7 IplImage *src;
8 src=cvLoadImage("C:/Users/qk/Documents/Visual Studio 2012/Projects/qk/qk/yongshi.jpg");
9 cvNamedWindow("1");
10 cvShowImage("1",src);
11 cvWaitKey(0);
12 cvReleaseImage(&src);
13 cvDestroyWindow("1");
14
15 }

