Win7x64+VS2015Pro+Matlab2016b+OpenCV3.2配置运行TLD

TLD即Tracking Learning Detection,Zdenek Kalal大神在其主页上给出的代码,是一种实时更新学习库的神级跟踪算法。ZK大神成功的利用这个算法开了一家公司,并且现在已经更新到2.2版本了,放到平板、电脑、工作站中都可以完美运行,已经做到了商业化。虽然开源代码是2011年写的,但是放到现在来说仍有重要的学习意义。

先说一下,我电脑的程序配置:WIN7x64+VS2015pro+MATLAB2016b+OpenCV3.2,一开始,这个程序在我电脑上始终没有跑起来,我通过在网上找到各种资料进行拼凑,却仍然不能正常运行,以至于一度想要将软件配置成几年前的版本(因为网上有前辈用WIN7+VS2005+MATLAB2011a+OpenCV2.2运行起来了,我的部分资料也是借鉴他的)。

鉴于所有的配置都是几年前的老套路,而OPENCV也已经更新到3.2(今天刚看了下cv的官网,8月初更新到了3.3。。。。。。)。我决定自己总结一篇最新的配置方法。

跑TLD程序,首先应该运行compile.m程序,然后再运行run_TLD.m,在任何机器上,首先得保证matlab的mex命令设置正确,其可通过:

1
mex –setup

配置好所用VS的编译环境,相关教程不少,之前因为我已经配置过了,此处就省略此步骤。之后打开compile.m
源代码中有如下两行:

1
2
include = ' -Ic:\OpenCV2.2\include\opencv\ -Ic:\OpenCV2.2\include\';
libpath = 'c:\OpenCV2.2\lib\';

需要改为自己的opencv路径,我的电脑上opencv路径为:

当然这些只是针对windows pc改的,若换成其它系统环境,则在相应的地方更改。
注意,此处有一个问题:我有段时间一直编译不通过其实就是因为lib后面没加’\’,网上的大神都没加。。。

少掉这个“\”会出现如下情况:

根据作者的说法 :若用VS2010会有不同:
You will need some extension toolboxes for Matlab, see below.

1) Install OpenCV2.2: compile OpenCV, set system PATH variable to link to OpenCV DLLs

2) Setup mex compiler in Matlab: run: mex -setup, select Visual Studio 2010 compiler from the list

3) Compilation of mex files: check paths in ‘compile.m’ file, run ‘compile.m’

3.1) If you are using Matlab 2011a, in TLD source, comment out the following lines in lk.cpp, fern.cpp, and bb_overlap.cpp (Otherwise, you will get an error about int being undefined which is a no-no in 2010):

1
2
3
#ifdef _CHAR16_T
#define CHAR16_T
#endif

4) run ‘run_TLD.m’, TLD should track a motorbike
即如红色部分所示,你需要把
lk.cpp, fern.cpp, and bb_overlap.cpp 这几个文件中的这几行代码注释掉。

1
2
3
#ifdef _CHAR16_T
#define CHAR16_T
#endif

但是我在VS2015pro上没有注释掉这几行。结果并没有什么影响,最后还是可以运行的。

按照网上的步骤进行修改后,我又遇到了一个比较恶心的问题,在运行compile.m时,提示我说:

what??min和max不是在Cpp中有定义的吗?之后看网上的前辈说将#include 加入头文件可以解决此问题,于是加入后出现:

好吧,彻底被打败了。(我一直在想为什么matlab调用的是VS进行编译竟然还找不到VS的头文件库。有知道的大神告诉我一下),既然调用头文件不能用的话,那就自己写一个定义吧:

之后再运行compile.m,无报错.

文章目录
|