Matlab调用cpp+第三方库
来源:互联网 发布:淘宝首页登录触摸板 编辑:程序博客网 时间:2024/06/03 17:46
问题描述:
Matlab调用CPP不新鲜,无非就是把写好的c语言编译成mex,然后直接调用呗。很多帖子和书都有描述。具体可以参考附录。这里描述的是如何用Matlab调用Opencv库支持的函数。
解决方法:
0、当然,你得先设置好起码的mex -setup,就是指定编译器,如果在M¥中大家都设成VS2008,VS2005之类的吧。
进入正题
1、首先打开我的Matlab2009b,然后输入mex -v,可以发现清单中Options file对应那项,直接选中那个文件名,在我这里差不多就是C:/Users/bit/AppData/Roaming/MathWorks /MATLAB/R2009b/mexopts.bat这个文件名,然后右键打开所谓open selection。
2、进入编辑状态后,找到所谓PAPTH,INCLUDE,LIB等地方,和在Visual Studio中设置options中那个VC diectory目录一样。
3、然后还得改LINKFLAGS=后面一大堆。如我这里把这个地方一行加成这样子
set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" cxcore200d.lib cv200d.lib highgui200d.lib ml200d.lib cvaux200d.lib libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"
其实就是和调用Opencv里面设置lib那一大堆文件一样。
4、这不算完,然后在VS中新建一个project,选择建立DLL动态链接库工程,最好都是空的。按照正常方式设置好opencv。然后在source files下添加你的code,比如我这里添加了Wrapper.cpp的程序。往里面填代码。其具体方式给个例子:
当然同目录下还得加入一个Wrapper.def文件,这个里面内容最好是如下:
LIBRARY Wrapper
EXPORTS mexFunction
6、这不算完,打开Tools->options,然后看到Project and solutions后往下面找VC++ Directories中那个Excutable files,变更为Include Files,然后添加你的matlab根目录/extern/include/win32还有include两个目录。此外,添加Library files中根目录/extern/lib/win32/microsoft。以及在Source files下添加Opencv2.0/Vc2008/src这个路径。
跑到Proejct property下面找additional dependencies,在opencv一大堆lib后面继续添加libmex.lib libmx.lib libmat.lib。
7、编译这个文件。然后开始debug,不出意外,会打开一个matlab 2009b的主程序,这样子后。找到你的vs project下面,然后在命令框输入mex Wrapper.obj,然后再输入Wrapper('lena.jpg');,这样子就可以调用opencv中那个函数了。
Matlab调用CPP不新鲜,无非就是把写好的c语言编译成mex,然后直接调用呗。很多帖子和书都有描述。具体可以参考附录。这里描述的是如何用Matlab调用Opencv库支持的函数。
解决方法:
0、当然,你得先设置好起码的mex -setup,就是指定编译器,如果在M¥中大家都设成VS2008,VS2005之类的吧。
进入正题
1、首先打开我的Matlab2009b,然后输入mex -v,可以发现清单中Options file对应那项,直接选中那个文件名,在我这里差不多就是C:/Users/bit/AppData/Roaming/MathWorks /MATLAB/R2009b/mexopts.bat这个文件名,然后右键打开所谓open selection。
2、进入编辑状态后,找到所谓PAPTH,INCLUDE,LIB等地方,和在Visual Studio中设置options中那个VC diectory目录一样。
3、然后还得改LINKFLAGS=后面一大堆。如我这里把这个地方一行加成这样子
set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" cxcore200d.lib cv200d.lib highgui200d.lib ml200d.lib cvaux200d.lib libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"
其实就是和调用Opencv里面设置lib那一大堆文件一样。
4、这不算完,然后在VS中新建一个project,选择建立DLL动态链接库工程,最好都是空的。按照正常方式设置好opencv。然后在source files下添加你的code,比如我这里添加了Wrapper.cpp的程序。往里面填代码。其具体方式给个例子:
#include "mex.h"#include <cv.h>#include <highgui.h>#include <cvaux.h>#include <cxcore.h>#include <ml.h>using namespace cv;void mexFunction (int nlhs, mxArray *plhs[], // 输出参数个数,及输出参数数组int nrhs, const mxArray *prhs[]) // 输入参数个数,及输入参数数组{int m, n;double *params, *des, *loc;char name[256];int buflens = mxGetNumberOfElements(prhs[0]);mxGetString(prhs[0], name, buflens+1);params = mxGetPr(prhs[1]);loc = mxGetPr(prhs[2]);m = mxGetM(prhs[2]);n = mxGetN(prhs[2]);if (mxGetM(prhs[1]) != 9 || mxGetN(prhs[1]) != 1){mexErrMsgTxt("Error in parameter/n");}if (m <= 0 || n != 2){mexErrMsgTxt("Error in location/n");}if (!mxIsChar(prhs[0])){mexErrMsgTxt("First parameter must be string/n");}//mexPrintf(name);IplImage * img = cvLoadImage(name, 1);Mat mat(img);//Mat mat = imread(name, 1);if (mat.data == NULL){mexErrMsgTxt("Error in image/n");}NamedWindows("1",1);imshow("1",mat);WaitKey(0);return;}
当然同目录下还得加入一个Wrapper.def文件,这个里面内容最好是如下:
LIBRARY Wrapper
EXPORTS mexFunction
6、这不算完,打开Tools->options,然后看到Project and solutions后往下面找VC++ Directories中那个Excutable files,变更为Include Files,然后添加你的matlab根目录/extern/include/win32还有include两个目录。此外,添加Library files中根目录/extern/lib/win32/microsoft。以及在Source files下添加Opencv2.0/Vc2008/src这个路径。
跑到Proejct property下面找additional dependencies,在opencv一大堆lib后面继续添加libmex.lib libmx.lib libmat.lib。
7、编译这个文件。然后开始debug,不出意外,会打开一个matlab 2009b的主程序,这样子后。找到你的vs project下面,然后在命令框输入mex Wrapper.obj,然后再输入Wrapper('lena.jpg');,这样子就可以调用opencv中那个函数了。
- Matlab调用cpp+第三方库
- Matlab调用cpp+第三方库
- Matlab调用cpp+第三方库
- android调用第三方库
- android调用第三方库
- 疑难杂症-调用第三方库
- MATLAB调用cpp文件
- android studio 2.2.3 导入第三方.so,并调用方法(无cpp、c源码)
- Android调用第三方库的方法
- 关于JNI调用第三方静态库
- jni调用第三方静态库
- 用qt调用第三方库
- android JNI 调用第三方动态库
- Android-jni 调用第三方动态库
- 关于JNI调用第三方静态库
- Qt调用VS第三方库
- 调用第三方库 多线程开发防止
- NDK调用第三方so共享库
- select标签,获取数据库中的值作为option. 修改时定位在指定位置
- poj 百练 2743(基础题)
- C++位操作介绍
- matlab设置线条颜色宽度线型
- QT主窗体右键弹出下拉菜单方法
- Matlab调用cpp+第三方库
- 连接PHPmyadmin是出现#2003 – 服务器没有响应 MySQL 无法启动的解决办法
- 今天早上发现淘宝网出现Error Velocity错误
- 开机自动运行自编qt程序
- Ajax隐藏帧技术
- 在 console mode 中使用 C/C++ 编译器 - 侯捷
- 飞漫软件公司十年反思--节选软件工程管理章节
- Android 9.png 特点说明
- 组件实现步骤