matlab 调用opencv函数方法及matlab编译c++程序
2013-12-12 11:30
615 查看
最近做实验需要使用matlab调用opencv的函数,然后就找了下如何使用matlab调用c++程序并设置依赖库。其实使用matlab调用opencv的程序就是在matlab调用c++程序时设置依赖库,因此,该方法同样适用于matlab调用其他的c++库。我的程序是在windows上运行的,因此该方法仅适用于windows平台。
好,下面开始叙述详细步骤,首先确定你的matlab是用的是vc++编译器,其他编译器没有尝试,设置过程如下:
1.在matlab命令行下输入mex -setup
2.提示Would you like mex to locate installed compilers [y]/n? 输入y
3.提示Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2011a\sys\lcc
[2] Microsoft Visual C++ 2010 in D:\Program Files\Microsoft Visual Studio 10.0
[3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 如果要使用vc2010输入2
4.询问你是否确认选择Are these correct [y]/n? 输入y,完成
之后,设置opencv的依赖库的目录,设置过程如下:
1.在matlab命令行输入 mex -v
2.输出提示信息:-> Default options filename found in C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a
----------------------------------------------------------------
-> Options file = C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat
MATLAB = D:\Program Files\MATLAB\R2011a ...
3.选中C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat右键打开这个文件
4.在这个文件里做如下修改
1.在set PATH=%VCINSTALLDIR%\bin;%VCINSTALLDIR%\VCPackages;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\Common7\Tools;%LINKERDIR%\bin;%MATLAB_BIN%;d:\sdk\opencv\build\install\x86\vc10\bin;%PATH%设置opencv的dll所在的位置
2.在set INCLUDE=%VCINSTALLDIR%\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE;%LINKERDIR%\include;d:\sdk\opencv\bulid\install
\include;%INCLUDE%设置opencv的include文件夹的位置
3.set LIB=%VCINSTALLDIR%\LIB;%VCINSTALLDIR%\ATLMFC\LIB;%LINKERDIR%\lib;%MATLAB%\extern\lib\win32;d:\sdk\opencv\build\install\lib;%LIB%设置lib库所在的位置
4.set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" libmx.lib libmex.lib libmat.lib /MACHINE:X86后面添加cxcore233d.lib
cv233d.lib highgui233d.lib根据自己使用的opencv版本号添加。
5.保存该文件。
至此,所有的设置完成。
————————————分割线————————————————————————————
下面开始讲述如何在matlab中写c++程序。
matlab写c++程序,头文件必须先包含"mex.h"
函数名称必须为void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])其中nlhs为输出参数个数,*plhs[]为输出参数数组,nrhs为输入参数个数,*prhs[]为输入参数数组。
下面为测试以上配置是否正确的简单测试代码:
之后运行opencvtest('test.jpg');就能显示图像。
如果出现找不到opencvtest.mexw32错误的话很可能是opencv的动态链接库的目录位置设置不正确,如果不想设置的话,直接将需要用到的dll文件拷贝到matlab\r2010a\win32文件夹下即可。
好,下面开始叙述详细步骤,首先确定你的matlab是用的是vc++编译器,其他编译器没有尝试,设置过程如下:
1.在matlab命令行下输入mex -setup
2.提示Would you like mex to locate installed compilers [y]/n? 输入y
3.提示Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2011a\sys\lcc
[2] Microsoft Visual C++ 2010 in D:\Program Files\Microsoft Visual Studio 10.0
[3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio
[0] None
Compiler: 如果要使用vc2010输入2
4.询问你是否确认选择Are these correct [y]/n? 输入y,完成
之后,设置opencv的依赖库的目录,设置过程如下:
1.在matlab命令行输入 mex -v
2.输出提示信息:-> Default options filename found in C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a
----------------------------------------------------------------
-> Options file = C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat
MATLAB = D:\Program Files\MATLAB\R2011a ...
3.选中C:\Users\Igloo\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat右键打开这个文件
4.在这个文件里做如下修改
1.在set PATH=%VCINSTALLDIR%\bin;%VCINSTALLDIR%\VCPackages;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\Common7\Tools;%LINKERDIR%\bin;%MATLAB_BIN%;d:\sdk\opencv\build\install\x86\vc10\bin;%PATH%设置opencv的dll所在的位置
2.在set INCLUDE=%VCINSTALLDIR%\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE;%LINKERDIR%\include;d:\sdk\opencv\bulid\install
\include;%INCLUDE%设置opencv的include文件夹的位置
3.set LIB=%VCINSTALLDIR%\LIB;%VCINSTALLDIR%\ATLMFC\LIB;%LINKERDIR%\lib;%MATLAB%\extern\lib\win32;d:\sdk\opencv\build\install\lib;%LIB%设置lib库所在的位置
4.set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" libmx.lib libmex.lib libmat.lib /MACHINE:X86后面添加cxcore233d.lib
cv233d.lib highgui233d.lib根据自己使用的opencv版本号添加。
5.保存该文件。
至此,所有的设置完成。
————————————分割线————————————————————————————
下面开始讲述如何在matlab中写c++程序。
matlab写c++程序,头文件必须先包含"mex.h"
函数名称必须为void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])其中nlhs为输出参数个数,*plhs[]为输出参数数组,nrhs为输入参数个数,*prhs[]为输入参数数组。
下面为测试以上配置是否正确的简单测试代码:
#include"mex.h" #include <opencv/cv.h> #include <opencv2/highgui/highgui.hpp> void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { char name[256]; int buflens =mxGetNumberOfElements(prhs[0]); mxGetString(prhs[0], name, buflens+1); if(!mxIsChar(prhs[0])) { mexErrMsgTxt("First parameter must be string/n"); return ; } mexPrintf(name); IplImage * img = cvLoadImage(name); if(img->imageData == NULL) { mexErrMsgTxt("Error in image/n"); return; } cvNamedWindow("test"); cvShowImage("test",img); cvWaitKey(0); return; }之后保存为opencvtest.cpp运行命令 mex opencvtest.cpp
之后运行opencvtest('test.jpg');就能显示图像。
如果出现找不到opencvtest.mexw32错误的话很可能是opencv的动态链接库的目录位置设置不正确,如果不想设置的话,直接将需要用到的dll文件拷贝到matlab\r2010a\win32文件夹下即可。
相关文章推荐
- Matlab程序 转C++/Opencv基于Mat 不可不知的17个函数
- 浅析将matlab函数编译成dll供Cpp调用的方法
- 【Java Opencv系列】2.1Java中调用Opencv的方法(第一个JavaOpencv程序)
- android调用matlab中的函数方法
- Java调用Matlab函数以及同时配置多版本JDK的方法
- Java端无需修改正确调用Matlab函数方法
- Matlab调用OpenCV(C++)程序
- 浅析将matlab函数编译成dll供Cpp调用的方法
- matlab函数编译成dll供Cpp调用的方法
- c#调用c++程序(DLL方法,以及opencv,运行开源的人脸识别seetaface)
- 基于MATLAB的m序列产生函数及其调用方法
- SQL存储过程(CLR存储过程)或函数中调用.NET程序集中的方法
- VC中调用其他程序的方法(函数)
- MATLAB中调用c++程序(函数)
- hadoop调用matlab程序的设置方法
- matlab调用opencv的函数
- java本地方法如何调用其他程序函数,方法详解
- Matlab程序转C++/OpenCV不可不知的17个函数
- 使用GCJ编译Java程序供Matlab调用Java对象方法实践
- WPF调用Matlab函数方法