关于TLD工程在VS2010下运行的修改

来源:互联网 发布:温湿度数据记录生成器 编辑:程序博客网 时间:2024/05/29 16:58

一、下面是TLD的博客主页,上面写了TLD算法的演变和其相关的文章,以及C++代码下载链接

1.1、Tracking-Learning-Detection[Project][OpenTLD/C++ Code]

1.2、下载得到的C++代码如下所示


其中:

datasets是一些视频数据;

doc是程序的流程图进行说明;

include是头文件;

src是源文件;

parameters.yml是参数文件;

readme是程序运行说明。

二、我们只要用到datasets、include、src、parameters.yml;

下面讲述如何在VS2010下创建工程;

2.1、创建一个空的solution(没有预编译的控制台程序)

2.2、首先将include中的文件拷贝放到src的文件夹中;然后将src、datasets、parameters.yml放到solution的工程目录下,如下所示:

2.3、编译项目,此时会冒出很多的错误,下面一项一项解决;

a、首先将头文件包含错误的全部由include<TLD.h> 改成 include "TLD.h";其他的头文件包含以此类推;

b、对错误

在TLD.h中包含头文件#include <opencv2/legacy/legacy.hpp>

c、对ceil和floor()函数的错误,全部将函数的的输入参数用float强制转换为浮点型;

d、对于round()函数的错误,由于vs2010没有这个函数,所以全部改成cvRound();

f、下面是引用了http://www.myexception.cn/vsts/1130491.html这个人的修改方法;直接复制他的方法

TLD::clusterBB函数中,vs不支持这种动态数组分配。
float L[c-1]; //Level
int nodes[c-1][2];
int belongs[c];
改成指针和动态分配内存
float *L = new float [c-1]; //Level
int **nodes = new int *[c-1];
for(int i = 0; i < 2 ;i ++)
nodes[i] = new int [c-1];
int *belongs = new int [c];
记得在函数末释放分配的内存
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;
至此,所以的错误就都解决了,但是我们发现这个项目是里面是先产生一个可执行文件在cmd下来执行。这样不方便我们调试;

因此我们要修改程序一开始的参数解析函数;

在mian函数前面定义一下函数;

void read_options2(VideoCapture& capture,FileStorage &fs)
{


char* parameterB="datasets//06_car//init.txt";
readBB(parameterB);
gotBB = true;


    string videoS = "datasets//06_car//car.mpg";
capture.open(videoS);
fromfile = true;


        string parameterP="parameters.yml";
fs.open(parameterP, FileStorage::READ);

/*if (strcmp(argv[i],"-no_tl")==0){
tl = false;
}
if (strcmp(argv[i],"-r")==0){
rep = true;
}*/

}

然后在mian函数中注释掉read_options(argc,argv,capture,fs);这个函数

而添加上read_options2(capture,fs);这个函数,至此,程序就可以正常的运行了。但是程序特别慢。还要进行优化。

原创粉丝点击