OpenTLD配置VS2010+OpenCV2.4,无须CMake

来源:互联网 发布:龙虎榜数据分析软件2.3 编辑:程序博客网 时间:2024/05/01 20:32

有很多大牛已经写过OpenTLD在VS中的配置,但是有些细节让我等小弱不甚明白,所以写这篇文章。

OpenTLD在VS2010和OpenCV2.4中的配置,OpenCV2.4是exe版本的,直接解压得到,大小约为2.29G,已经测试过,该方法也可以在OpenCV2.2运行;VS2010安装了SP1,单是在没有SP1版本的情况下依旧可以运行。OpenTLD是AlanTorresC++实现的OpenTLD zip

1、下载软件

  下载OpenCV-2.4.0,双击解压到C:\OpenCV2.4。

  下载VS2010,安装。

2、配置OpenCV环境变量

计算机->(右键)属性->高级系统设置->高级(标签)->环境变量->(双击)path(用户,系统里面的path任选其一)->在变量值里面添加

C:\OpenCV2.4\build\x86\vc10\binC:\OpenCV2.4\build\common\tbb\ia32\vc10

3、配置工程的opencv依赖(每次新建工程都要重新配置,要执行此步骤请先跳到第4步建立工程)

1)、项目(菜单项)->…属性->VC++目录:需要配置“包含目录”和“库目录”两项。

2)、配置“包含目录”项:添加以下四行,最后一行是tld中自带的include,也要加进去。

C:\OpenCV2.4\build\includeC:\OpenCV2.4\build\include\opencvC:\OpenCV2.4\build\include\opencv2E:\leProjects\tld\tld\include

3)、配置“库目录”项:添加行

C:\OpenCV2.4\build\x86\vc10\lib

4)、配置连接器:项目(菜单项)->…属性->连接器->输入->附加依赖项

针对debug配置添加以下库:

opencv_calib3d240d.libopencv_contrib240d.libopencv_core240d.libopencv_features2d240d.libopencv_flann240d.libopencv_gpu240d.libopencv_highgui240d.libopencv_imgproc240d.libopencv_legacy240d.libopencv_ml240d.libopencv_objdetect240d.libopencv_ts240d.libopencv_video240d.lib

如果是release配置则添加:

opencv_calib3d240.libopencv_contrib240.libopencv_core240.libopencv_features2d240.libopencv_flann240.libopencv_gpu240.libopencv_highgui240.libopencv_imgproc240.libopencv_legacy240.libopencv_ml240.libopencv_objdetect240.libopencv_ts240.libopencv_video240.lib

4、用VS2010新建控制台工程测试:

OpenTLD在VS2010编译运行包括如下步骤:

  • 新建空工程(我是vs2010),取名TLD,并将解压缩下include的文件导入到TLD头head file中;并将解压缩下src的文件导入到TLD头sorcefile中。
  • round错误;解决办法:改成cvRound
  • 编译成功后,运行,摄像头一直亮着,将run_tld.cpp中的 capture.open(0)注释掉;
  • 看了之后,明白了原来运行需要传递参数。见下面cmd命令:
     -p parameters.yml -s datasets\01_david\david.mpg -b datasets\01_david\init.txt –tl
  • TLD::bbPoints函数调用的ceil和floor函数强制把参数类型转换为double。
  • TLD::clusterBB函数中,vs不支持这种动态数组分配。
    float L[c-1]; //Levelint nodes[c-1][2];int belongs[c];
  • 改成指针和动态分配内存
    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的地方,这两个地方之前需要加上这一段。
    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;

注意:第一个视频运行起来貌似有问题,可以改换其他组的视频。

可以做的事情:摆脱opencv的函数库,和加入多线程、directx、cpu增强指令集以及gpu的支持。以提高程序的执行效率。


原创粉丝点击