matlab调用opencv函数的配置

环境:

VS2010 活动解决方案平台x64

WIN 8.1

Opencv 2.4.3

Matlab 2012a

1、  首先保证vs2010能正确调用opencv函数,

2、  Matlab中选择编译器,操作如下:

打开matlab2012,输入mex –setup,出现如下提示:

Welcome to mex -setup.  This utility will help you set up

a default compiler.  For a list of supported compilers, see

http://www.mathworks.com/support/compilers/R2012a/win32.html

Please choose your compiler for building MEX-files:

Would you like mex to locate installed compilers [y]/n?

输入y,出现如下提示:

Select a compiler:

[1] Lcc-win32 C2.4.1 in C:\PROGRA~1\MATLAB\R2012a\sys\lcc

[2] Microsoft Visual C++ 2010 in C:\Program Files\Microsoft Visual Studio 2010

[0] None

Compiler:

输入2,出现如下提示:

Please verify your choices:

Compiler: Microsoft Visual C++ 2010

Location: C:\Program Files\Microsoft Visual Studio 2010

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\zhangjing\Application Data\MathWorks\MATLAB\R2012a\mexopts.bat

From template:              C:\PROGRA~1\MATLAB\R2012a\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:

http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html

Building with the -largeArrayDims option enables the new API.

**************************************************************************

3、  配置一些目录

在matlab中,输入mex –v

下面会有显示:

-> Default options filename found in C:\Documents and Settings\zhangjing\Application Data\MathWorks\MATLAB\R2012a

----------------------------

->    Options file           = C:\Documents and Settings\zhangjing\Application Data\MathWorks\MATLAB\R2012a\mexopts.bat

MATLAB                 = C:\PROGRA~1\MATLAB\R2012A

->    COMPILER               = cl

->    Compiler flags:

COMPFLAGS           = /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD

OPTIMFLAGS          = /O2 /Oy- /DNDEBUG

DEBUGFLAGS          = /Z7

arguments           =

Name switch         = /Fo

。。。。。。。。。(此处省略一些)

选中上面Options file=后面的部分,右键->Open Selection,打开mexopts.bat

找到下面部分,增加红色的部分

set MATLAB=%MATLAB%

set VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 2010

set VCINSTALLDIR=%VSINSTALLDIR%\VC

rem In this case, LINKERDIR is being used to specify the location of the SDK

set LINKERDIR=C:\Program Files\Microsoft SDKs\Windows\v7.0A\

set PATH=%VCINSTALLDIR%\bin;%VCINSTALLDIR%\VCPackages;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\Common7\Tools;%LINKERDIR%\bin;%MATLAB_BIN%;%PATH%

set INCLUDE=%VCINSTALLDIR%\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE;%LINKERDIR%\include;%INCLUDE%;D:\opencv\include;D:\opencv\include\opencv;D:\opencv\include\opencv2

PS:本人导入的包含如下

;D:\Program Files\opencv\modules\world\include;D:\Program Files\opencv\modules\core\include;D:\Program Files\opencv\modules\videostab\include;D:\Program Files\opencv\modules\video\include;D:\Program Files\opencv\modules\ts\include;D:\Program Files\opencv\modules\stitching\include;D:\Program Files\opencv\modules\photo\include;D:\Program Files\opencv\modules\ocl\include;D:\Program Files\opencv\modules\objdetect\include;D:\Program;Files\opencv\modules\nonfree\include;D:\Program Files\opencv\include\opencv2;D:\Program Files\opencv\include\opencv;D:\Program Files\opencv\modules\ml\include;D:\Program Files\opencv\modules\legacy\include;D:\Program Files\opencv\modules\imgproc\include;D:\Program Files\opencv\modules\highgui\include;D:\Program Files\opencv\modules\gpu\include;D:\Program Files\opencv\modules\flann\include;D:\Program Files\opencv\modules\features2d\include;D:\Program Files\opencv\include;D:\Program Files\opencv\modules\contrib\include;D:\Program Files\opencv\modules\calib3d\include;D:\Program Files\opencv\modules\androidcamera\include

set LIB=%VCINSTALLDIR%\LIB;%VCINSTALLDIR%\ATLMFC\LIB;%LINKERDIR%\lib;%MATLAB%\extern\lib\win32;%LIB%;D:\opencv\build\x86\vc10\lib

PS:本人导入的包含如下

;D:\Program Files\opencv\build\x64\vc10\lib

set MW_TARGET_ARCH=win32

rem ********************************************************************

rem Compiler parameters

rem ********************************************************************

set COMPILER=cl

set COMPFLAGS=/c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD

set OPTIMFLAGS=/O2 /Oy- /DNDEBUG

set DEBUGFLAGS=/Z7

set NAME_OBJECT=/Fo

rem ********************************************************************

rem Linker parameters

rem ********************************************************************

set LIBLOC=%MATLAB%\extern\lib\win32\microsoft

set LINKER=link

set LINKFLAGS=/dll /export:%ENTRYPOINT%

/LIBPATH:"%LIBLOC%" opencv_core231d.lib opencv_highgui231d.lib opencv_video231d.lib opencv_ml231d.lib opencv_legacy231d.lib opencv_imgproc231d.lib opencv_flann231d.lib opencv_features2d231d.lib opencv_calib3d231d.lib opencv_objdetect231d.lib opencv_contrib231d.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 /manifest /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"

set LINKOPTIMFLAGS=

(注意上面include lib处要加分号,LINKFLAGS处各个lib之前要回空格)

PS:本人导入的lib如下:

opencv_calib3d243d.lib opencv_contrib243d.lib opencv_core243d.lib opencv_features2d243d.lib opencv_flann243d.lib opencv_gpu243d.lib opencv_haartraining_engined.lib opencv_highgui243d.lib opencv_imgproc243d.lib opencv_legacy243d.lib opencv_ml243d.lib opencv_nonfree243d.lib opencv_objdetect243d.lib opencv_photo243d.lib opencv_stitching243d.lib opencv_ts243d.lib opencv_video243d.lib opencv_videostab243d.lib

在matlab当前目录下建立cpp文件(简单方法,txt改后缀为cpp),vs打开敲入代码,代码需要是Matlab的C语言接口风格,函数内部调用OpenCV函数演示功能,简化后的代码:程序命名为useOpenCV.cpp保存。

#include"mex.h"

#include     "cv.h"

#include    "highgui.h"

using namespacecv;

voidmexFunction (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);

return;

}

5 在matlab里输入 mexuseOpenCV.cpp编译。

6 在matlab里输入命令调用编译好的文件:useOpenCV(‘lena.bmp’);即可调用。注意,lena.bmp图片放在当前文件下。

时间: 2024-10-11 07:12:52

matlab调用opencv函数的配置的相关文章

[转] matlab调用opencv函数的配置

原文地址百度账户 aleasa123 1.  首先保证vs2010能正确调用opencv函数, 2.  Matlab中选择编译器,操作如下: 打开matlab2012,输入mex –setup,出现如下提示: Welcome to mex -setup. This utility will help you set up a default compiler. For a list of supported compilers, see http://www.mathworks.com/supp

matlab调用opencv出错总结

本人写的matlab调用opencv的代码: 1.配置:严格按照之前配置的文章进行配置 2.编译 3运行 运行时提示错误 代码的功能:matlab传入一组数组 ,利用groupRectangles(dst, 1, 0.2);进行窗口融合.再将融合的数组传到matlab //矩阵的传入与传出 //20151021矩阵[1 3 50 100;3 5 50 100;5 7 50 100;7 9 50 100;9 11 50 100]出错,得进行调试 //opencv 的结果为[5 7 50 100]

[blog 项目实战派]csharp通过dll调用opencv函数

[blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数 前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实际的代码编写过程中,很多时候想把已经写好的matlab函数融合进去,但是依然是将图片作为参数传递比较成为问题.这里我经过一段时间的研究解决了这个问题(目前只解决了灰度图片下的图片传递问题).这个问题包含几个难点,一个是mxmatrix的使用,一个是matlab和opencv对于图片的格式处理是不一样的. 本次这个项目,是opencv通

[blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数

?一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找到了比较好的资料.一个是thinimage,一个是basework,里面都实现了这里的“csharp通过dll调用opencv函数,并且采用图片作为参数”.这里小结如下. 关于如何“csharp通过dll调用opencv函数”,请参考前面博文,这里主要说如何“采用图片为参数”. 在编写图像识别/增强/机器视觉等项目的时候,一般会将算法打包成dll文件给客户,如果界面是用mfc写的话,是很好实现这个

如何通过C#调用OpenCV函数(自制OpenCV的c++ dll文件)

写在前面:学习CUDA过程中看到了可以用OpenCV写一个类,然后直接调用的方法,感觉很有意思(基础太差,可能这是个很基础的问题).于是就想在 C# 中调用OpenCV的方法,发现有点麻烦,需要生成 .dll(动态链接库)文件,生成过程中出了些小问题,所以把这个过程记录下来,以备以后查看. 首先,你的电脑上需要安装OpenCV,具体安装过程百度即可,并不难(具体可以参见我转载的另一篇OpenCV配置的文章).下面开始进入正题,以VS2017为例. 1.  新建 空项目=>确定(注意,项目名称与下

Matlab调用外部库函数方法和注意事项

在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以节省内存开销. 加载库 加载库加载库 加载库 语法:loadlibrary('shrlib','hfile') 其中shrlib为加载的动态链接库文件名(filename.dll),hfile为头文件名,它包含函数原型.例如,当加载包 含MATLAB中mx程序的libmx库时,可以使用下列语句. h

关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法

在网上找了半天解决办法,也没有找到,在此共享我自己的一个问题,不具有普遍性,仅作参考! 问题描述:MATLAB调用xlsread函数出现问题,第一次运行的时候,出现服务器异常,再次运行能够正常读取数据: 在调用xlswrite函数时,一直出现服务器异常状况,不能将数据写入excel表格中. 问题关键:不是MATLAB的原因,问题出在excel软件上! 问题解决:xlswrite函数在调用时会占用excel的com端口,所以要保证在调用时这个端口是开放的,也就是没有被其他程序占用.打开excel(

matlab和C/C++混合编程--调用opencv

最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然后用c#调用matlab,单单这个配置问题就搞了我们一个多星期,不过还是顺利解决了,解决方法以后有时间再写个博客出来. 虽然我们整个项目已经能在c#下跑通了,但是检索效果真不理想,检查各种可能出现问题的地方,首先自然是特征的问题.我们做的是偏图像的检索,有些现成的特征提取算法是在opencv下实现的

Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之--找出Matlab内置函数中,已经大概的介绍了matlab内置函数在混合编程中的优点,并通过程序找出了matlab中的大部分内置函数,当然更多人关心是如何像我所说得那样,不用直接编译,就直接在C#中调用这些内置函数.本文就带你揭开这些谜团. 声明,这篇文章是需要一点点混合编程基础的,基本概念和过程要懂一点,如果能简单成功混编一个简单的计算或者绘图例子