已下博文转自 http://blog.sina.com.cn/s/blog_6b648c160101pnn3.html
首先需要在电脑上安装matlab、opencv、vs。
本人最终调试成功的版本为:matlabR2012b,vs2013,opencv2.4.8。
中间还有matlab2009,vs2008,opencv2.2,opencv2.3.1版本的调试,不过失败了……
第一个问题,matlab和vs版本的问题:
首先需要指出,ZK大神开放的源代码是matlab和vs混合编程的,因此需要配置一下matlab中的编译器环境。具体操作为:
在matlab的commond window中输入: mex -setup
然后会出现:
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?
选择y,回车,此时可能会出现
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2009b\sys\lcc
[2] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio
[0] None
Compiler:
提示选择编译器。假如这个时候没有发现自己安装的vs版本,选择0,回车,y,回车。重新输入 mex -setup,在出现:
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?
后选择n,回车,此时会出现更多的编译器,如下:
[1] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)
[2] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)
[3] Lcc-win32 C 2.4.1
[4] Microsoft Visual C++ 6.0
[5] Microsoft Visual C++ .NET 2003
[6] Microsoft Visual C++ 2005 SP1
[7] Microsoft Visual C++ 2008
[8] Microsoft Visual C++ 2008 Express Edition
[9] Open WATCOM C++
[0] None
Compiler:
一般情况下就会出现自己的编译器。
注意:matlab和vs有版本兼容的问题。比如matlab2009无法找到vs2010的编译器,但是matlab2011可以。所以会出现你用同样的操作方式,但是得到不同的结果。在无法找到编译器情况下,有网友通过自己手动指定编译器目录也ok了。但是我这样做了还是不行,时间关系就没有再调试这个问题,果断换了高版本的matlab。
以2008为例,具体操作为,
在上面的命令下,输入7,回车,会出现:
The default location for Microsoft Visual C++ 2008 compilers is C:\Program Files\Microsoft Visual Studio 9.0,
but that directory does not exist on this machine.
Use C:\Program Files\Microsoft Visual Studio 9.0 anyway [y]/n?
此命令的意思是,是否确定路径。输入n,回车,再根据提示将自己的安装目录路径数据进去,后面的就不详述了。
第二个问题,opencv的安装问题
关于opencv的具体配置过程就不详述了,官网和网友的帖子有很详细的说明,但是这里我要说的问题是,opencv的安装路径。
在vs下配置opencv时,可以将其安装在任意路径下,自己也测试的opencv示例程序发现没有问题,但是在运行混编程序时却有可能提示各种问题。例如无法找到include....,无法打开....lib等等。打开TLD中的 compile.m 文件,可以发现两行代码,如下:
include = ' -Ic:\OpenCV2.2\include\opencv\ -Ic:\OpenCV2.2\include\';
libpath = 'c:\OpenCV2.2\lib\';
看到这里就明白了,该环境下的opencv路径是在m文件中指定的。需要把其中的路径改成自己opencv的路径及版本,例如include路径,我的是:
include = ' -ID:\opencv\opencv\build\include\opencv\ -ID:\opencv\opencv\build\include\ -ID:\opencv\opencv\build\include\opencv2\';
需要注意的是,这中间的任何一个空格都可能出现错误。
例如,假如 include = ' -ID:\opencv\opencv\build\include\opencv\ -ID:\opencv\opencv\build\include\ -ID:\opencv\opencv\build\include\opencv2\';中,-ID前面的空格少了,会出现MEX错误。
注意:甚至opencv的安装路径中的空格都可能导致错误。例如:opencv的安装路径在 program files 中,在
第三个问题,TLD的运行。
在运行complie.m之前,需要在matlab底下用mex设置编译器,命令是 mex -setup 。中间可能遇到的问题见第一条。
这样配置完后,先运行compile.m,编译无错误后再运行TLD,正常情况下就ok了。
还有可能会遇到一些并非混编环境的乱七八糟的小问题,例如可能是matlab版本中有些函数和ZK用的不一样,需要做一些小的调整,根据提示的错误做一些修改。
第四个问题,vs2010及以上版本,需要对lk.cpp fern.cpp bb_overlap.cpp修改,将其中的
#ifdef _CHAR16_T #define CHAR16_T #endif
这三行代码注释掉。正如作者所说:https://github.com/zk00006/OpenTLD/wiki/Installation
第五个问题,与另一网友的问题一样,他的帖子里面有详细的说明,链接:http://www.cnblogs.com/moondark/archive/2012/04/12/2444602.html
再修改掉这一行代码,总算是可以正常运行了。
ZK大神在run_TLD中留下了数据源的接口,稍微修改一下就可以根据自己的兴趣和需要开始测试啦。
本人在调试的时候参考链接如下:
http://www.cnblogs.com/moondark/archive/2012/04/10/2441081.html