matlab可以调用所有opencvmatlab库函数命令大全吗

如何在matlab中调用opencv_百度知道下次自动登录
现在的位置:
& 综合 & 正文
在Matlab中调用OpenCV函数
由于最近学习的需要, 所以需要將別人写好的mex funtion重编一次;但是使用到了opencv的lib, 所以在编译mex的時候, 需要将opencv的lib也一起加到matlab的环境中。在网上看了好多教程,总结了一下:
系统环境: win XP
matalb: matalb 2012b
c++ compiler: visual studio 2010
首先设定matlab所选定的compiler:
第一步:mex -setup
第二步:选择2,即VS编译器
Compiler: 2 Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: D:\Program Files\Microsoft Visual Studio 10.0
Are these correct [y]/n? Y ***************************************************************************
Warning: MEX-files generated using Microsoft Visual C++ 2010 require
that Microsoft Visual Studio 2010 run-time libraries be
available on the computer they are run on.
If you plan to redistribute your MEX-files to other MATLAB
users, be sure that they have the run-time libraries. ***************************************************************************
Trying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2012b\mexopts.bat From template:
D:\PROGRA~1\MATLAB\R2012b\bin\win32\mexopts\msvc100opts.bat
Done . . .
**************************************************************************
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements.
In the near future
you will be required to update your code to utilize the new
API. You can find more information about this at:
/help/techdoc/matlab_external/bsflnue-1.html
Building with the -largeArrayDims option enables the new API. **************************************************************************
第三步:打开第二步红颜色字体出目录下的mexopts.bat(注意:系统不同目录不同,以自己系统显示为准),找到PATH,INCLUDE,LIB,(下图红线圈出)添加opencv与在VS中设置的PATH,INCLUDE,LIB一致的路径(下图红线为我自己的opencv路径)。
第四步,编写。
在同一目录下编写mexuseOpencv.ccp,这个就不要多说了吧。使用VS编写即可。
#include"mex.h"
"highgui.h"
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");
mexPrintf(name);
IplImage * img = cvLoadImage(name, 1);
if(img-&imageData == NULL)
mexErrMsgTxt("Error in image/n");
cvNamedWindow("1",1);
//imshow("1",mat);
cvShowImage("1",img);
cvWaitKey(0);
第五步,在MATLAB中输入 mex mexuseOpencv.cpp。如果,有错误,按错误提示进行修改程序,这是可以使用MATLAB自带的编辑器打开修改。
第六步,在MATLAB中输入命令调用编译好的文件即可:mexuseOpencv('lena.bmp').
这样的话你就可以在Matlab中,使用Opencv里面的函数了。
http://blog.csdn.net/climbingc/article/details/6762424
/ykaitao/item/4f2d4ad0bc786
&&&&推荐文章:
【上篇】【下篇】matlab与C++混编的目的是什么,是为了速度吗?还是为了调用opencv的函数,matlab不能调用只能靠C++调用?_百度知道查看: 4645|回复: 1
关于Matlab调用Opencv函数时库文件设置的心得
论坛上看到bittnt 发表的帖子:“Matlab调用cpp+opencv库心得”(被很多人博客转载,原帖地址:http://www./forum/viewtopic.php?f=1&t=9043&p=49434&hilit=matlab+%E8%B0%83+%E7%94%A8+opencv+%E5%BA%93#p49434),正好最近想用matlab调用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&
void mexFunction (int nlhs, mxArray *plhs[], // 输出参数个数,及输出参数数组
int nrhs, const mxArray *prhs[]) // 输入参数个数,及输入参数数组
double *params, *des, *
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);
当然同目录下还得加入一个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中那个函数了。There is a will, there is a way!
&!-- m --&&a class=&postlink& href=&/bittnt&&/bittnt&/a&&!-- m --&
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%以上为原帖内容%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
现作详细说明:
第0、1步应该没有问题,略过;
第2步:找到mex参数配置文件,matlab命令窗输入mex -v得到-&& & Options file& && && &&&= C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2011a\mexopts.bat ,打开这个路径即找到了文件“mexopts.bat ”。然后在文件中作如下修改:
1)在set VCINSTALDIR=xxx的下面加入:set OPENCVDIR=“你opencv的安装路径”,我的是Opencv2.3.1,这些文件都在build文件夹下,所以配置如下
set VCINSTALLDIR=%VSINSTALLDIR%\VC
set OPENCVDIR=C:\Program Files\OpenCV-2.3.1-win-superpack\opencv\build
2)在INCLUDE=后面加上%OPENCVDIR%\include (即包含所有opencv头文件的目录) ,按所装OpenCV版本不同,具体目录位置也不同,我的是:
%OPENCVDIR%\%OPENCVDIR%\include\%OPENCVDIR%\include\opencv2
3)在LIB=后面加上%OPENCVDIR%\lib(即包含所有opencv lib文件的目录) ,我的是:
%OPENCVDIR%\x86\vc9\%OPENCVDIR%\x86\vc9\lib
第3步:帖子中会看到在LINKFLAGS中加入了OpenCV的静态链接库,即lib文件,我把在VS2008上配置时用到的lib全部加到set LINKFLAGS=***后面加上opencv_contrib231d.lib opencv_core231d.lib opencv_flann231d.lib opencv_gpu231d.lib opencv_highgui231d.lib opencv_imgproc231d.lib opencv_legacy231d.lib opencv_ml231d.lib opencv_objdetect231d.lib opencv_ts231d.lib opencv_video231d.lib
OK,到第4步及以下我就没有按帖子做了,直接在记事本上或者VS上写好代码,然后保存为cpp格式,再用Matlab命令窗输入:
&& mex test0922.cpp
Verbose mode is on.
Error using mex
Not enough input arguments.
这是为什么、、、、
Powered byMatlab(1)
研究计算机视觉的同学们对OpenCV和Matlab应该非常熟悉,OpenCV作为最大的计算机视觉开源库已经得到了非常广泛的使用,在视觉研究领域的地位不可动摇,其主要是基于C/C++实现的,主要的开发平台包括VS,Qt等等。Matlab以其在矩阵运算方面独有的优势在图像处理领域如鱼得水,Matlab的图像处理工具箱IPT已经集成了常见的图像处理函数,现在很多研究论文的代码都是基于用Matlab实现的。由于C\C++和Matlab在处理不同问题的时候各有千秋,如何将两者结合起来编程显得尤为重要,事实上,在计算机视觉研究领域,很多大牛的文章就是用C\C++和Matlab混合编程实现的,最后一般给的都是matlab的接口。
废话少说,下面介绍如何在Matlab中调用OpenCV的库函数,也方便日后查阅,进一步学习。
平台:Win7 64,Matlab R2012a 64,OpenCV 2.4.10,VS2010
默认以上软件均在计算机中安装好了,可以利用VS2010成功创建基于OpenCV的应用程序。下面是在Matlab中调用OpenCV库函数的详细步骤。
1. 首先是在Matlab中设置C\C++编译器,选择Mirosoft Visual C++ 2010。
2. 第二步在Matlab的Mex配置文件中添加OpenCV库支持,这一步类似于在VS2010的项目属性中设置OpenCV的相关信息。
在Matlab的命令行中输入 mex -v,找到mexopts.bat文件所在的位置,用记事本或其他程序打开。
修改如下地方:
这样在matlab中的OpenCV已经配置好了。
3. 新建useOpenCV.cpp文件,代码如下:
#include&mex.h&
&highgui.h&
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&);
mexPrintf(name);
IplImage * img = cvLoadImage(name, 1);
if(img-&imageData == NULL)
mexErrMsgTxt(&Error in image/n&);
cvNamedWindow(&1&,1);
//imshow(&1&,mat);
cvShowImage(&1&,img);
cvWaitKey(0);
}4. 在matlab里面输入mex useOpenCV.cpp编译,会生成一个名为useOpenCV.mexw64的文件(类似于windows中的dll文件)。
5. 在matlab里输入调用语句,useOpenCV('test.jpg');即可显示我们输入的图像。
以上内容参考了,http://blog.csdn.net/sxjk1987/article/details/8783016及http://blog.csdn.net/raodotcong/article/details/8785358两篇博文。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47658次
排名:千里之外
转载:24篇
(1)(2)(2)(3)(1)(1)(2)(1)(3)(1)(3)(2)(2)(2)(1)(4)(2)}

我要回帖

更多关于 matlab调用opencv函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信