matlab、opencv、vs2010配置

最近做实验需要使用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[]为输入参数数组。

下面为测试以上配置是否正确的简单测试代码:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include"mex.h"  
  2.   
  3. #include <opencv/cv.h>  
  4. #include <opencv2/highgui/highgui.hpp>  
  5.   
  6. void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])  
  7. {  
  8.     char name[256];  
  9.     int buflens =mxGetNumberOfElements(prhs[0]);  
  10.     mxGetString(prhs[0], name, buflens+1);  
  11.      if(!mxIsChar(prhs[0]))  
  12.      {  
  13.         mexErrMsgTxt("First parameter must be string/n");  
  14.         return ;  
  15.      }  
  16.     mexPrintf(name);  
  17.     IplImage * img = cvLoadImage(name);  
  18.      if(img->imageData == NULL)  
  19.      {  
  20.         mexErrMsgTxt("Error in image/n");  
  21.         return;  
  22.      }  
  23.   
  24.     cvNamedWindow("test");  
  25.     cvShowImage("test",img);  
  26.   
  27.     cvWaitKey(0);  
  28.   
  29.     return;  
  30.   
  31. }  
之后保存为opencvtest.cpp运行命令 mex opencvtest.cpp

之后运行opencvtest('test.jpg');就能显示图像。

如果出现找不到opencvtest.mexw32错误的话很可能是opencv的动态链接库的目录位置设置不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值