一名热爱体感技术的
业余专业开发人员

Kinect桥接Matlab代码简介Kinect Bridge With Matlab

Kinect桥接Matlab代码简介Kinect Bridge With Matlab

驱动版本:Kinect for Windows SDK v1.7

项目名称:KinectBridgeWithMATLABBasics-D2D

编程语言:C++

 

环境配置

同样在文件夹下有一个”KinectBridgeWithMATLABBasics-D2D.doc”文档告诉我们如何进行环境配置。有二种设置环境变量的方法,我这里选择第二种做演示。

开始—>右键我的电脑—>属性—>高级–>环境变量–>新建一个”系统变量”–>增加个一MATLAB_DIR的环境变量,存放matlab安装地址。这个地址下,可以看到extern文件夹,否则是错误的。

    设置完毕后,注销(或者重启)后才能生效。

由于我的电脑是64bit的,直接进行编译后出现错误提示:

  1. LINK : fatal error LNK1181: 无法打开输入文件”libmx.lib

我们需要把解决方案平台,改成x64才行。

 

除了这样,我们(x64电脑的)还可以从别人x32电脑拷贝matlab下的extern文件夹进行配置即可。如下图,我把从x32电脑上拷贝的文件夹改成extern32,然后重新配置下环境,编译成功!【不建议这样做,下面发现会运行失败】

 

发现丢失libmx.dll,复制到路径下(x32和x64不一样的,请根据情况复制过来,后来发现都可以运行,不用在意)运行,发现运行失败,具体则是m_matlabEngine = engOpen(NULL);失败,经过百度,发现解决方法http://zhidao.baidu.com/question/148040156.html,需要先进行matlab组件注册才可以,注册方法如图(其实就一句语句,但要在合适的地方输入):

注册成功后出现matlab命令行,咱们关掉它。这里我尝试了自己的x64编译x32环境再运行的话,是无法成功的打开matlab引擎的,只能使用x64才行。所以这里要正对自己的pc进行配置和运行为佳。[发现libmx.dll可以混用,不管是win32还是win64文件夹下的]

 

程序运行和简要解读

最终运行结果图:

看了下程序,和之前的OpenCV十分相似,它运行的流程也一样:使用SDK获取的图像传到Matlab的mxArray数组结构中,再调用MatlabEvalExpr(执行字符串语句)对它进行各种操作。

例子:


const
char* c_erodeElementExpr = “filtered_img = imerode(img, se);”;

hr = MatlabEvalExpr(c_erodeElementExpr);

 

也就是使用了matlab的混合编程,只是使用matlab中的函数或者是方法,但主要上层编码工作还是要需要C++完成。如果您已经有很好的matlab算法代码,只是想看看Kinect数据运行会有什么结果,那么使用这种混合编程方法运行算法,可以得到需要的结果。目前它这个c++例子中,骨骼跟踪也没加入(这么核心的功能啊),可以考虑自己加入此功能。

还有想要说的是,这个仅仅是新的例子,如果会混合编程,一年多前就可以写出相似或者更好的例子了。

 

数据存放到matlab的mxArray结构可以看函数:

HRESULT MatlabFrameHelper::GetColorData(mxArray* pImage) const

HRESULT MatlabFrameHelper::GetDepthData(mxArray* pImage) const

如果以前写过matlab混合编程,一定对这些函数(mx开头的函数)不陌生。

由于不使用Matlab进行详细研究,就不深入解读了。如果您没有运行成功欢迎留言。欢迎关注我的微博箫鸣琴奏_CPP程序侠

 

matlab引擎

http://www.cnblogs.com/jiajinwen/archive/2012/04/13/2257644.html