图文详解OpenTLD C++版平台的搭建

来源:互联网 发布:java源代码加密 编辑:程序博客网 时间:2024/06/05 09:12

转自:http://www.myexception.cn/other/1801989.html

本文以图文的方式详解了OpenTLD平台的搭建。硬件平台:装有Windows 7/8/XP的电脑一台;软件平台:OpenTLD、OpenCV、Visual Studio 2013。

1、软件下载

OpenTLD:https://github.com/arthurv/OpenTLD/tree/master

OpenCV:http://opencv.org/downloads.html

下载后如下图:


对OpenCV解压:双击=》点击Extract:



再对OpenTLD解压,解压后得到下图:


2、OpenCV用户变量和系统变量的设置

计算机=》属性=》高级系统设置:


高级=》环境变量:


首先设置用户变量:


(注意:x86代表你的电脑是32位系统,vc10代表你的平台是VS2010版本。)


再设置系统变量:

(注意:x86代表你的电脑是32位系统,vc10代表你的平台是VS2010版本。)


3、Visual Studio 2010工程的建立

打开软件=》New Project:


然后按下图设置:


点击OK后点击Next:


最后按照下图选择,最后点击Finish:


4、在VS中设置OpenCV

这是因为我们使用的OpenTLD要调用OpenCV库,这三步很重要,不可省略。

第一步单击项目属性(Properties)=》VC++ Directiories=》Include Directiories:

(把OpenCV的include加进去,如下图的第3步所示)


第二步单击项目属性(Properties)=》VC++ Directiories=》Library Directiories:

(把OpenCV的lib加进去,如下图的第3步所示)

第三步单击项目属性(Properties)=》Linker=》Input=》Additional Dependencies:

(把OpenCV的lib加进去,如下图的第4步所示)

需要注意的是:第三步中加载的lib与第二步加载的lib不是同一个东西。第二步加载的lib是路径,第三步加载的是该路径下的内容,如下图所示:(此处需要特别注意的是,在Release时加载的是下图中划线的那些,即xxx.lib,若是Debug模式,则加载xxxd.lib)。


5、将OpenTLD的头文件和源代码复制到VS当前工作目录

OpenTLD的头文件:


OpenTLD的源代码:


然后把它们加载到当前工程中:


6、修改OpenTLD的头文件

将四个头文件中的#include<  >都修改为#include" ":


在TLD.h中我们会发现PatchGenerator会出错,如下图:


这是因为原作者没有添加定义PatchGenerator类的头文件,我们把该头文件加上即可,如下图:


7、添加round函数

添加round函数,是因为VS中没有自带这个函数,而OpenTLD用到了这个函数。

第一步:在TLD.h中加入下面的代码:

int round(float f);
如下图所示:


第二步将下面代码加入TLD.cpp中,代码如下:

int TLD::round(float f){ if ((int)f+0.5>f) return (int)f; else return (int)f + 1; }
如下图所示:


8、将VS工程下的四个头文件复制到VS的安装路径

完成前7步,编译后我们发现找不到头文件,如下图所示:

解决方法就是将修改后OpenTLD头文件复制到VS的安装路径下,如下图:


9、ceil错误和floor错误的修改

完成第8步后相信你的工程可以编译,不过出现很多warning和几处errors,下面依次解决这些问题。

编译之后出现警告和错误提示如下:


第一步,ceil错误的解决:错误如下图:


解决方法如下图:


第二步,floor错误的解决,错误如下图:


解决方法如下图:


10、动态数组分配错误的解决方法

在TLD::clusterBB函数中,vs不支持这种动态数组分配,所以出现如下错误:


解决方法如下图,注释掉源代码中的分配动态数组的方法,把下面代码加进去:

float *L = new float [c-1]; //Levelint **nodes = new int *[c-1];for(int i = 0; i < 2 ;i ++)nodes[i] = new int [c-1];int *belongs = new int [c];
最后不要忘记释放分配的动态内存,加入如下代码,加入地方是该函数最后,即return 1前面,如下图:
delete [] L;L = NULL;for (int i = 0; i < 2; ++i){delete [] nodes[i];nodes[i] = NULL;}delete []nodes;nodes = NULL;delete [] belongs;belongs = NULL;
最后,编译成功。大功告成。

11、DEMO演示

首先将OpenTLD下的datasets文件夹和parameters.yml复制到当前工程目录下,如下图:


将datasets中的视频复制出来,以david为例,此时,david测试视频和parameters.yml都在当前工程的工作目录下了。

接着修改主函数中的代码,也就是如何让代码读取david测试视频,方法如下图所示:


编译运行,结果如下图:



大笑大笑大笑一切OK,亲~你的平台搭好了吗?大笑大笑大笑
0 0
原创粉丝点击