TLD算法环境配置与调试总结

TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zdenek Kalal在其攻读博士学位期间提出的一种新的单目标长时间跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。

本文主要针对 Zdenek 的原生 Matlab 和 C++ 混合编译代码的配置和调试进行讲解。


  1. 我的环境是 Matlab R2016 、Visual Studio 2013 、opencv 2.4.9。这里注意一下最好使用opencv2,否则使用opencv3可能会引起更多问题,而VS目测作者使用的是2008,不过2010以上版本也不会有太大问题,只需要改一行代码,这个后面会说。

  2. 下好opencv和VS后,注意在VS里配置好opencv的安装路径和 lib,这里讲解的博客很多,读者可自行查阅。注意要把 opencv 安装路径放入环境变量 Path,否则会出现:

Error:Invalid MEX-file ‘xxxx’:找不到指定的模块

  1. 在matlab里面运行mex -setup,选择 C++。

  2. 在matlab里面打开compile.m文件,把里面的对OpenCV的绝对路径改成自己在电脑上安装的OpenCV的路径。例如:

include = '-ID:\opencv\build\include\opencv\ -ID:\opencv\build\include\opencv2\ -ID:\opencv\build\include\';
libpath = 'D:\opencv\build\x64\vc12\lib\';
  1. ( VS2010 以上版本)点开mex文件夹,将文件lk.cpp、fern.cpp、bb_overlap.cpp 文件中的下面三句话注释掉:
#ifdef_CHAR16T
#define CHAR16_T
#endif

否则会出现:

error C4430:缺少类型说明符-假定为int。注意:C++不支持int

  1. 在mex文件夹下bb_overlap.cpp文件的头部加上下面代码。
#include "minmax.h"

否则会出现:

error C3861: “min”: 找不到标识符

  1. 将 lk.cpp 里面的:
cvCalcOpticalFlowPyrLK( IMG[J], IMG[I], PYR[J], PYR[I], points[1], points[2], nPts, cvSize(win_size,win_size), Level,0,0,cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), CV_LKFLOW_INITIAL_GUESSES | CV_LKFLOW_PYR_A_READY | CV_LKFLOW_PYR_B_READY );

改为:

cvCalcOpticalFlowPyrLK( IMG[J], IMG[I], PYR[J], PYR[I], points[1], points[2], nPts, cvSize(win_size,win_size), Level, status , 0, cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), CV_LKFLOW_INITIAL_GUESSES | CV_LKFLOW_PYR_A_READY | CV_LKFLOW_PYR_B_READY );

否则运行 compile.m 进行 mex 时会报错。

  1. 将 img_blur.m 里的这一行代码:
h = FSPECIAL('gaussian',csize,sigma);

改为:

h = fspecial('gaussian',csize,sigma);

否则会出现:

Error: 找不到 ‘FSPECIAL’ 的完全匹配项(区分大小写)。

  1. (调用摄像头)将initcamera.m里的这两行代码中的 x 位置改为自己摄像头的属性编号:
source.vid = videoinput('winvideo', x, 'YUY2_640x480');

opt.source   = struct('camera',x,'input','_input/','bb0',[])
  1. 代码运行完不要直接叉掉,须按空格退出。

否则会出现:

Error: 错误使用 matlab.graphics.primitive.Image/set ,对象无效或已删除。

注意上述问题后,依次运行 compile.m、initcamera.m、run_TLD.m 即可运行TLD程序了。

最后附上我的效果图:(真容是不可能有滴)

在这里插入图片描述

虽说左下角 FPS 较低,但确实没什么卡帧、停顿的感觉。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值