matlab运行dxcv,怎样在matlab中调用Opencv的函数

原文:http://www.opencv.org.cn/forum/viewtopic.php?p=48751解决方法:

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

#include

#include

#include

#include

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中那个函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值