目标跟踪算法TLD配置(OpenTLD+VS2015+Win7+Opencv2.4.13)

TLD跟踪算法C++版本github下载地址如下:

GitHub - arthurv/OpenTLD: C++ implementation of TLD

更多版本下载参考博客:TLD视觉跟踪算法_了凡春秋_新浪博客

1、新建VS工程并将src文件和include文件都放置在工程目录中:

图中MyTLD.cpp对应 run_tld.cpp。

2、配置好OpenCV,并在TLD.h中添加头文件:

#include <opencv2\legacy\legacy.hpp>

原因:这是因为opencv版本不同,库路径不匹配,需要添加额外的库。

3、更改TLD.cpp中函数:int TLD::clusterBB(const vector<BoundingBox>& dbb,vector<int>& indexes);

int TLD::clusterBB(const vector<BoundingBox>& dbb,vector<int>& indexes){
  //FIXME: Conditional jump or move depends on uninitialised value(s)
  const int c = dbb.size();
  //1. Build proximity matrix
  Mat D(c,c,CV_32F);
  float d;
  for (int i=0;i<c;i++){
      for (int j=i+1;j<c;j++){
        d = 1-bbOverlap(dbb[i],dbb[j]);
        D.at<float>(i,j) = d;
        D.at<float>(j,i) = d;
      }
  }
  //2. Initialize disjoint clustering
  float *L;//Level
  L = (float *)malloc((c - 1) * sizeof(float));
  int **nodes;
  nodes = (int **)malloc((c - 1) * sizeof(int *));
  for (int i = 0; i < c - 1; i++)
  {
	  *(nodes + i) = (int *)malloc(2 * sizeof(int));
  }
  int *belongs;
  belongs = (int *)malloc( c * sizeof(int));
 int m=c;
 for (int i=0;i<c;i++){
    belongs[i]=i;
 }
 for (int it=0;it<c-1;it++){
 //3. Find nearest neighbor
     float min_d = 1;
     int node_a, node_b;
     for (int i=0;i<D.rows;i++){
         for (int j=i+1;j<D.cols;j++){
             if (D.at<float>(i,j)<min_d && belongs[i]!=belongs[j]){
                 min_d = D.at<float>(i,j);
                 node_a = i;
                 node_b = j;
             }
         }
     }
     if (min_d>0.5){
         int max_idx =0;
         bool visited;
         for (int j=0;j<c;j++){
             visited = false;
             for(int i=0;i<2*c-1;i++){
                 if (belongs[j]==i){
                     indexes[j]=max_idx;
                     visited = true;
                 }
             }
             if (visited)
               max_idx++;
         }
         return max_idx;
     }

 //4. Merge clusters and assign level
     L[m]=min_d;
     nodes[it][0] = belongs[node_a];
     nodes[it][1] = belongs[node_b];
     for (int k=0;k<c;k++){
         if (belongs[k]==belongs[node_a] || belongs[k]==belongs[node_b])
           belongs[k]=m;
     }
     m++;
 }
 free(L);
 free(belongs);
 for (int i = 0; i < c - 1; i++)
 {
	 free(*(nodes + i));
 }
 free(nodes);
 return 1;
}

 原因:如下图的地方,动态申请内存的方式不对。

4、更改初始化参数函数void TLD::read(const FileNode& file)(手动初始化,也可以按照原来的文件读取方式)

void TLD::read(void){
  ///Bounding Box Parameters
  min_win = 15;
  ///Genarator Parameters
  //initial parameters for positive examples
  patch_size = 15;
  num_closest_init = 10;
  num_warps_init = 20;
  noise_init = 5;
  angle_init = 20.0;
  shift_init = 0.02;
  scale_init = 0.02;
  //update parameters for positive examples
  num_closest_update = 10;
  num_warps_update = 10;
  noise_update = 5;
  angle_update = 10.0;
  shift_update = 0.02;
  scale_update = 0.02;
  //parameters for negative examples
  bad_overlap = 0.2;
  bad_patches = 100;
  classifier.read();
}

 5、更改初始化参数函数void FerNNClassifier::read(const FileNode& file)(手动初始化,也可以按照原来的文件读取方式)

void FerNNClassifier::read(void){
  ///Classifier Parameters
  valid = 0.5;
  ncc_thesame = 0.95;
  nstructs = 10;
  structSize = 13;
  thr_fern = 0.6;
  thr_nn = 0.65;
  thr_nn_valid = 0.7;
}

6、更改4、5步骤的函数声明及主函数中的调用

7、运行及调试TLD算法

8、更改好的代码百度云下载链接:

链接:https://pan.baidu.com/s/1TtiNazwOyk0Pc6PH-KfoWw 密码:kxh2

### Vivado 下载错误原因分析 Vivado 的 `download error` 可能由多种因素引起,以下是常见的原因及其对应的解决方案: #### 1. 用户信息不完整 如果用户的个人信息未填写完全,则可能导致认证失败并引发下载错误。具体表现为提示 `authentication error: download failed due to incomplete user information`[^2]。 **解决方法**: 登录 Xilinx 官方网站 (https://www.xilinx.com),进入个人账户页面,补充完整的用户资料。 --- #### 2. 软件界面卡死问题 某些情况下,即使安装程序已成功运行,但由于特定的系统环境或配置问题,可能会导致 Vivado 卡在某个界面上无法继续操作[^1]。这种现象通常发生在 Windows 平台下。 **解决方法**: 尝试关闭其他占用资源较高的应用程序,并重新启动安装过程;或者切换到 Linux 系统尝试安装。 --- #### 3. 日志文件中的拼写错误 在仿真阶段 (`sim\behav\xsim`) 中可能出现由于代码中存在字符缺失而导致的编译错误。这些错误会记录在日志文件 `xvlog.log` 中[^3]。虽然这类问题是开发期间遇到较多的情况,但在安装过程中也可能因为脚本解析异常而触发类似的错误行为。 **解决方法**: 打开日志文件定位具体的语法错误位置,并修正源码后再执行安装命令。 --- #### 4. 认证机制失效 对于 Linux 系统上的 SDK 或 Vivado 工具链而言,即便完成了注册流程仍可能遭遇身份验证障碍。这主要是因为在网络连接不稳定的情况下未能及时同步最新的授权数据所致[^4]。 **解决方法**: 检查互联网连通状态确保稳定传输;另外也可以通过手动更新许可证的方式来绕过在线校验环节。 ```bash # 更新本地license路径至最新版本 source /path/to/settings64.sh ``` --- ### 总结 综上所述,当面对 Vivado “Download Error”的情况时可以从以下几个方面入手排查:确认是否有遗漏必填项、观察是否存在阻塞进程的现象以及审查相关联的日志文档寻找线索最后再考虑调整网络参数或是重置许可设置等措施加以应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值