我是靠谱客的博主 疯狂大炮,最近开发中收集的这篇文章主要介绍Matlab2014b运行TLD,步骤搭建 编译的时候缺少mex.h,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 搭载环境

步骤1:下载Demo: Zdenek Kalal的openTLD,见https://github.com/zk00006/OpenTLD(或alantrrs的)

步骤2:安装Matlab R2014b,VS2013,OpenCV2.4.9(需要将dll路径添加到环境变量的path中

步骤3:设置编译器:mex -setup,选择mex -setup C++

步骤4:修改compile.m,执行

步骤5:执行run_TLD.m


2. 编译

(1)设置“complie.m”文件的opencv的路径

原文件路径为:

     include = ' -Ic:OpenCV2.2includeopencv -Ic:OpenCV2.2include';

     libpath = 'c:OpenCV2.2lib';

我的路径为

     include = ' -ID:opencvbuildincludeopencv -ID:opencvbuildincludeopencv2 -ID:opencvbuildinclude';
     libpath = 'D:opencvbuildx64vc12lib';

特别注意选择build目录下的include和lib文件夹。要不就会提示找不到….lib文件。


(2)打开mex文件下的的lk.cpp文件,找到其中的186行,这里看仔细了,是这一行:

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 );

 将上述红色的0改为status,如下:

 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 );

修改之后,重新编译。


3.问题汇总

(1)Error: 无法找到"Program Files..."

解决办法:include和libpath中的opencv路径不能有空格。


(2)Error: 错误使用 mex
   正在创建库 lk.lib 和对象 lk.exp
lk.obj : error LNK2019: 无法解析的外部符号 cvAlloc,该符号在函数 mexFunction 中被引用....

解决办法:对于x64系统,需将libpath = 'd:opencvbuildx86vc12lib';改为libpath = 'd:opencvbuildx64vc12lib';


(3)Error: c:Matlabr2014bexternincludematrix.h(266) : error CC4430:缺少类型说明符 -假定为int。注意:C++不支持int

解决办法:

在lk.cpp, fern.cpp, and bb_overlap.cpp中注释掉这些代码:

 #ifdef _CHAR16_T 

#define CHAR16_T 

#endif


(4)Error: bb_overlap.cpp(35) : error C3861: “min”:  找不到标识符

解决办法:修改TLD代码包中mex文件夹下bb_overlap.cpp文件,在头部加上#include <algorithm>



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

解决办法:h = FSPECIAL('gaussian',csize,sigma);改为fspecial


(6)Error:Invalid MEX-file 'D:TLDOpenTLD-mastermexlk.mexw64':找不到指定的模块

解决办法:虽然安装了OpenCV,但是没有将DLL添加到Path中,lk.mexw64(其实也是个DLL)就会找不到关于opencv的DLL。在环境变量->系统变量->Path中添加openCV的dll路径,如d:opencvbuildx64vc12bin. (x64指64位系统,vc12指vs2013),改完后要重启系统。

(7)编译时缺少mex.h文件

解决办法:该文件在你的matlab安装路径下,只需将 D:MATLABexterninclude添加进入c工程的外部依赖项即可。
具体方法:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录

编译的时候缺少mex.h

(8)Error: 执行run_TLD.m后,点×关掉窗口,显示:错误使用 matlab.graphics.primitive.Image/set 对象无效或已删除。

解决办法:按空格退出

另,这篇文章作者对TLD进行了很好的总结:http://blog.csdn.net/windtalkersm/article/details/8018980


最后

以上就是疯狂大炮为你收集整理的Matlab2014b运行TLD,步骤搭建 编译的时候缺少mex.h的全部内容,希望文章能够帮你解决Matlab2014b运行TLD,步骤搭建 编译的时候缺少mex.h所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部