最近在看TLD这篇论文,其作者提供的源代码是matlab与C++混编的,所以在运行代码之前,需要进行一些配置步骤,网上也提供了很多,不过我根据我在配置中遇到的问题总结了一下,应该是比较完整的版本:
步骤如下:
1、在matlab的command window中输入:mex_setup 选择 y 回车,并选择相应的VS编译器 (这里需要注意:MATLAB 的版本要高于VS的版本才可以,比如我的是matlab R2012a ,我在选择编译器版本时只能选择VS2010,虽然我的电脑中也安装了VS2013)详细过程见下面的截图:
2、安装opencv (我安装的是opecv 2.4.12) 安装教程可以参见网上,以后应该也会写一个完整的版本。
3、打开TLD的compile.m文件
将下面的信息修改成自己的opencv的路径和版本:
include = ' -ID:\MenghanZhou\Han_Tools\VS2013\opencv\build\include\opencv\ -ID:\MenghanZhou\Han_Tools\VS2013\opencv\build\include\ -ID:\MenghanZhou\Han_Tools\VS2013\opencv\build\include\opencv2\';
%D:\MenghanZhou\Han_Tools\VS2013\opencv\build\include\opencv\
%D:\MenghanZhou\Han_Tools\VS2013\opencv\build\include\
%D:\MenghanZhou\Han_Tools\VS2013\opencv\build\includeopencv2\
libpath = 'D:\MenghanZhou\Han_Tools\VS2013\opencv\build\x64\vc12\lib\';
注意其中的空格!!!!
4、如果你是64位系统,打开mex文件夹,找到lk.cpp fern.cpp bb_overlap.cpp,将以下代码注释掉
//#ifdef _CHAR16T
//#define CHAR16_T
//#endif
5、打开lk.cpp,找到其中的186行左右,将Level,0,0改成Level,status,0,具体见下:
//forward trajectory 前向轨迹跟踪
cvCalcOpticalFlowPyrLK( IMG[I], IMG[J], PYR[I], PYR[J], points[0], points[1], nPts, cvSize(win_size,win_size), Level, status, 0, cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), CV_LKFLOW_INITIAL_GUESSES);
//backward trajectory 后向轨迹跟踪
cvCalcOpticalFlowPyrLK( IMG[J], IMG[I], PYR[J], PYR[I], points[1], points[2], nPts, cvSize(win_size,win_size), Level, status, 0, cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), CV_LKFLOW_INITIAL_GUESSES | CV_LKFLOW_PYR_A_READY | CV_LKFLOW_PYR_B_READY );
6、打开compile.m,第30行左右修改为:
files = dir(fullfile(libpath, '*.lib'));
lib = [];
for i = 1:length(files),
lib = [lib ' ' libpath '\' files(i).name];
end
7、运行compile.m,出现compilation finished。哈哈,ok!!
8、把img\img_blur.m中的第29行的FSPECIAL改成小写fspecial,运行run_TLD.m
出现下图这种对原图像中每帧图像目标boundingbox的跟踪,则说明运行成功啦!!
另外,可能会提示.....不是有效的32位程序类似的错误,这时的解决方法是:
将系统环境变量中的opencv bin目录中的×86改为×64
修改完之后,记得要重启matlab再运行程序。