VS版本:2013
OpenCV:2.4.6
matlab:R2014a
源码下载网址:openTLD

下载源码解压下来,工程根目录下首先运行compile.m,这里一般会碰到如下问题:

1、因为作者的目录肯定不会跟你的一样,所以windows下,你把compile.m中的include和libpath改为你自己build好的opencv路径

2、error C4430之类错误的解决方法:在本机的MATLAB安装目录下找到extern\include\matrix.h头文件,打开该头文件,添加如下命令: #pragma warning (disable:4430) ,我还报过一些其他的,不太记得了,这类问题就是在它吐出的错误信息中找到所在的头文件名,去extern\include\目录下找到对应的头文件,加上#pragma warning(disable:对应的错误码)

3、没找到cv.h等诸如此类的,这是opencv所带的头文件,这里我使用暴力的解决办法,直接去我电脑上安装opencv的文件里找到对应的头文件都拷到mex目录下,如下图:

java 使用OpenCV 保存rtsp视频流 opencv rtmp_头文件


很暴力不过解释起来也方便,mex文件夹里面cpp文件使用的是#include “cv”,而且他是直接在当前目录或者配置好的目录下寻找,我为了简单解决,而且头文件不大,就直接拷过来了.

4、我碰到了提示min和max在bb_overlap.cpp里没有声明,我自己在这个cpp文件里面写了一个

`double min(double a,double b) 
 { 
 if(a>b) 
 return b; 
 else 
 return a; 
 }
double max(double a,double b) 
 { 
 if(a>b) 
 return a; 
 else 
 return b; 
 }`

编译通过:

java 使用OpenCV 保存rtsp视频流 opencv rtmp_源码_02

好了,到这一步完成就可以运行run_TLD.m,如果出现不是有效的Win32程序,则需要在计算机环境变量path也要相应的修改成本机opencv安装路径\x64\vc12\bin,关闭matlab后再运行,这时会出FSPECIAL问题,把它改成fspecial即可运行成功:

java 使用OpenCV 保存rtsp视频流 opencv rtmp_opencv_03


如果你想运行你自己的视频也很好办,参考以下:(如果有问题再留言问我)

1、写一个程序,把一个视频都分解成帧,我自己用opencv写了一个小程序,功能就是把视频分解成%05d这种格式名称的帧,或者推荐使用FFMPEG,这个linux下一行命令就可以了

2、在run_TLD.m文件里面把_input修改成你的文件夹,我就改写成根目录下的imgOfPano文件夹,里面都是按照%05d的命名的图片

opt.source = struct('camera',0,'input','imgOfPano/','bb0',[]); % camera/directory swith, directory_name, initial_bounding_box (if empty, it will be selected by the user)

3、在imgOfPano里面生成一个init.txt文件,里面写好4个值,比如:100,100,200,200 这四个值代表你初始想跟踪的方块位置,前两个是方块左上角像素坐标,后两个是方块右下角像素坐标,这个可以通过windows自带的画图软件获得。或者不创建这个文本也行,程序会让你在第一帧上画一个,画好后在方框里面左键双击一下即可开始追踪这个方块了。

4、这里提醒一下,有可能你追踪出来效果不好,那可能不是算法问题,因为这个TLD里面的L是learning的意思,所以它是有在线学习的,所以初始参数对他很总要,比如它给的视频帧比较小,所以run_TLD中patchsize设置为15,15,如果你的视频帧稍微大一些,并且选择的跟踪框大的话还需要调参数,这里面还有一些参数值,我也是刚下一天,没去研究,有研究好的同学可以一起交流一下。