TLD算法(matlab和vc混编版本)源代码调试运行

已下博文转自  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,回车,此时会出现更多的编译器,如下:

 Select a compiler:
[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 中,在   -ID中指定路径后,在编译时会出现无法找到inlude文件。个人猜测原因是 program files 中间的空格,matlab会认为是两个路径。解决办法,把opencv拷贝到另一个路径下,在complie.m文件中指定新的opencv路径,而不需要修改原有的opencv配置和环境变量,本人最后就是这样搞定的。

 

第三个问题,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

http://blog.csdn.net/lxiaoxiaot/article/details/6777232

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值