Kinect桥接Matlab代码简介KinectBridge 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结构可以看函数:
HRESULTMatlabFrameHelper::GetColorData(mxArray* pImage) const
HRESULTMatlabFrameHelper::GetDepthData(mxArray* pImage) const
如果以前写过matlab混合编程,一定对这些函数(mx开头的函数)不陌生。
matlab引擎
http://www.cnblogs.com/jiajinwen/archive/2012/04/13/2257644.html