OpenTLD源码生成VS2010工程和编译过程

OpenTLD算法是做什么的,我就不多介绍了,很多人前辈都介绍过了。我参考的博客有

庖丁解牛TLD(五)——井底之蛙啦~

OpenTLD C++ 尝试车辆目标跟踪[1]

看了这个挺好玩的,就打算自己编译一下跑跑看。

我的环境是win7  + vs2010  原来装了个opencv2.3.1(也是网上下载的,不是那种自己编译安装的,所以少了一些工程文件,这个让我在编译OpenTLD的时候搞了好久才搞明白)

首先下载OpenTLD,下载的网址是:

https://github.com/alantrrs/OpenTLD

下载后解压到了C盘,我的OpenCV也是在C盘。

接着要用Cmake来生成VS2010的工程文件,需要先下载Cmake,下载的地址:

http://www.cmake.org/files/v2.8/cmake-2.8.10.2-win32-x86.exe

下载安装好后,需要设置环境变量,添加(这个根据你自己的opencv安装路径来)

OpenCV_DIR=C:\opencv\build

接下来就是从开始菜单找到“Visual Studio 命令提示(2010)”,进入命令行,cd到你解压的opentld目录,接下执行如下命令。

mkdir build

cd build

cmake ../src/

这个过程报错,说找不到FindOpenCV.cmake文件,

这个时候就到网上下载FindOpenCV.cmake文件,地址是http://opencv.willowgarage.com/wiki/FindOpenCV.cmake,把这个页面中FindOpenCV.cmake的内容拷下来,保存到src目录。再执行cmake ../src/ 应该就会成功了。

(我的opencv 2.3.1是网上下载的,不需要自己编译,所以这个过程中出现了问题,提示少了OpenCVConfig.cmake文件,找来找去没有,只好重新用cmake命令到opencv的build目录去执行了一下cmake ../src/,生成成功,接着在opentld的build目录执行cmake ../src/就没问题了)。

生成工程成功以后,就是导入到vs2010中,编译执行,悲剧了,提示报错,在网上找了一些资料,仔细看了我参考了第一编文章后面的回复,总算编译通过了,过程如下:

至于编译过程会遇到的错误修正总结如下:
1、TLD::bbPoints函数调用的ceil函数强制把参数类型转换为double。
2、vs2010不存在round函数,重新写一个
int round(float f)

if ((int)f+0.5>f) 
return (int)f; 
else 
return (int)f + 1; 
}

或者把round要改成cvRound。
3、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;
4、调用floor函数的地方,把参数强制类型转换为double

把所有错误按上面说的方法做修改后,保存编译,OK整个过程完成了。


本文相关的工程文件和源码上传到了CSDN的下载区,大家可以到此下载:

OpenTLD源码与VS2010工程

http://download.csdn.net/detail/benshu_001/4934079



你可能感兴趣的:(OpenCV,OpenTLD)