TLD(Tracking-Learning-Detection,跟踪-学习-检测)跟踪系统最大的特点就在于能对锁定的目标进行不断的学习,以获取目标最新的外观特征,从而及时完善跟踪,以达到最佳的状态。也就是说,开始时只提供一帧静止的目标图像,但随着目标的不断运动,系统能持续不断地进行探测,获知目标在角度、距离、景深等方面的改变,并实时识别,经过一段时间的学习之后,目标就再也无法躲过。 膜拜下各位视觉界大牛:Dr. Zdenek Kalal(PAMI 2011),TLD源码都给出了!还有Charles Bibby(ECC08)。而Alan Torres大神,他已经用c++把TLD重新写好了,而且代码很规范,不过他用的是OpenCV2.3,本Sir迁移到了2.4.3,嘿嘿。 TLD下载地址:https://github.com/arthurv/OpenTLD,是Linux版本的,下面是如何在VS2010+OpenCV2.4.3上编译通过。 1、TLD::bbPoints函数调用的ceil函数强制把参数类型转换为double。配置好vs2010的opencv2.4.3编译环境,添加函数库和头文件,新建一个win32 console空项目,然后直接把https://github.com/alantrrs/OpenTLD下载的OpenTLD源代码的include和src下面的文件复制到工程文件下,添加代码和头文件进工程,添加的库: opencv_calib3d243d.lib opencv_contrib243d.lib opencv_core243d.lib opencv_features2d243d.lib opencv_flann243d.lib opencv_gpu243d.lib opencv_highgui243d.lib opencv_imgproc243d.lib opencv_legacy243d.lib opencv_ml243d.lib opencv_objdetect243d.lib opencv_ts243d.lib opencv_video243d.lib opencv_calib3d243.lib opencv_contrib243.lib opencv_core243.lib opencv_features2d243.lib opencv_flann243.lib opencv_gpu243.lib opencv_highgui243.lib opencv_imgproc243.lib opencv_legacy243.lib opencv_ml243.lib opencv_objdetect243.lib opencv_ts243.lib opencv_video243.lib。至于编译过程会遇到的错误修正总结如下:首先把所有引用头文件的地方<>改为"". 2、vs2010不存在round函数,重新写一个,或者改为Cvround. int round(float f) { if ((int)f+0.5>f) return (int)f; else return (int)f + 1; } 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
5、记得#include <opencv2/legacy/legacy.hpp>,这是2.4版本淘汰2.3之处。 |
|
来自: 昵称12637001 > 《烟雨科技》