1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab调用opencv库 matlab调用opencv库

matlab调用opencv库 matlab调用opencv库

时间:2023-06-22 02:12:15

相关推荐

matlab调用opencv库 matlab调用opencv库

matlab中有许多图像处理的函数简单方便,比如矩阵x 求垂直积分 直接sum(x) 就可以了。不知道OPENCV里面有没有类似的功能,反正我是没找到。就准备用matlab调用OPENCV里面的函数。需要将opencCv的lib加到matlab的环境中。

看到网上有两种不同的cpp处理方式,有人是在VS下面编译然后matlab调用,也有直接用mex命令编译的。我采用后面这种方式

系统环境: win XP

matalb: matlab a

c++ compiler: visual studio

OpenCV : 2.1版本

刚开始matlab版本是7.1 始终不能识别到VS的C 编译器,看到有些人的解决办法是下面这样的。

关于Matlab找不到vs或vs编译器的解决办法.

问题:matlab命令行中运行mex -setup后,找不到vs或vs编译器

>> mex -setup

Please choose your compiler for building external interface (MEX) files:

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

Select a compiler:

[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\Ra\sys\lcc\bin

[0] None

原因:matlab在识别vs的编译器时,使用的是“version"英文,而vs08显示的版本信息是“优化编译器”五个汉字,匹配不上,所以找不到。

解决方案:用记事本打开matlab/ra/bin/mexsetup.pm文件,找到 correc_version函数(第477行,也可用ctrl+F查找),将这个函数中的return ($version =~ /Version.$versionNumber/i);改成return ($version =~ /优化编译器.$versionNumber/i);即可。

但我发现我这样做了还是不行,提供参考。也许是我机器配置的问题。

我的解决方法简单粗暴,直接装matlab Rb, mex -setup 里面就直接可以识别到VS的编译器了。

接下来在matlab的配置文件中添加OpenCV库支持,

mex -v 查看配置文件所在文件夹位置

其中option filename就是配置文件。我的机器配置输出如下所示。其中红色为添加opencv的更改部分。

mex -v

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

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

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

我改了如下三个地方:

添加

set OPENCVDIR=D:\OpenCV2.1

set PATH=%VCINSTALLDIR%\BIN\;%VSINSTALLDIR%\VC\bin;%LINKERDIR%\bin;%VSINSTALLDIR%

\Common7\IDE;%

VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\Tools\bin;%VCINS

TALLDIR%\VCPack

ages;%MATLAB_BIN%;

%

OPENCVDIR%

;%PATH%

set INCLUDE=%VCINSTALLDIR%\ATLMFC\INCLUDE;%VCINSTALLDIR%\INCLUDE;%LINKERDIR%\include;

%OPENCVDIR%

\include\opencv;%INCLUDE%

set LIB=%VCINSTALLDIR%\ATLMFC\LIB;%VCINSTALLDIR%\LIB;%LINKERDIR%\lib;%VSINSTALLDIR%

\SDK\v2.0\lib;%MAT

LAB%

\extern\lib\win32;%OPENCVDIR%\lib;%LIB%

set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%"

cxcore210d.lib cv210d.lib

highgui210d.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"

以下例子借鉴自/climbingc/article/details/6762424

在matlab当前目录下建立cpp文件(简单方法,txt改后缀为cpp),vs打开敲入代码,代码需要

是Matlab的C语言接口风格,函数内部调用OpenCV函数演示功能,简化后的代码:程序命名为

useOpenCV.cpp保存。

#include"mex.h"

#include "cv.h"

#include "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);

return;

}

5 在matlab里输入 mex useOpenCV.cpp编译。

6 在matlab里输入命令调用编译好的文件:useOpenCV(‘lena.bmp’);即可调用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。