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

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

系统环境: win XP

matalb: matlab 2010a

c++ compiler: visual studio 2008

OpenCV :  2.1版本

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

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

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

>> 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\R2008a\sys\lcc\bin

[0] None

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

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

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

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

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

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

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

mex -v

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

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

->    Options file           = C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2011b\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"

以下例子借鉴自http://blog.csdn.net/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’);即可调用。

matlab调用opencv库,matlab调用opencv库相关推荐

  1. C++ 接口 函数导出_Matlab与C/C++混合编程、Visual C++与Matlab封装库互相调用相关要点...

    [版本说明] Visual Studio 2010 Matlab2014a 64bit Windows7 64bit 以下是我安装的 Matlab2014a 支持的 C++混合编译器的SDK版本(为了 ...

  2. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何"csharp通过dll调用opencv函数,图片作为参数 ...

  3. Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework

    Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework 该文章是一篇说明c++/Qt调用 ...

  4. python调用matlab需要的库_python调用matlab文件

    python和matlab在计算机各具优势,最近在研究一个文字识别的小程序.同时用到matlab和python,matlab负责图片的前期处理,python负责图片的文字识别,需要相互调用.我尝试了很 ...

  5. MATLAB调用python文件以及调用.exe文件方法

    引言: 在编程的时候有这么一个需求,就是要用MATLAB去调用python文件以及调用python写好的功能函数. 配置环境: MATLAB 2017b: python 2.7x: 方法: 1.查看m ...

  6. matlab fft2的作用,为什么Matlab fft2比OpenCV dft快得多(why Matlab fft2 is much faster than OpenCV dft)...

    为什么Matlab fft2比OpenCV dft快得多(why Matlab fft2 is much faster than OpenCV dft) 我只是测试比较OpenCV的dft函数和Mat ...

  7. matlab算法开发与C++调用

    linux--QT create(C++ or C)调用matlab代码 调用matlab/simulink的方法一个是自动生成c/c++代码,另一个是生成动态链接库. 由于单片机上只能调用静态链接库 ...

  8. 怎么把dll库写成MATLAB接口,如何在Matlab中应用动态连接库接口技术

    1 引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能.利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分 ...

  9. 如何把opencv编译到matlab,c – 为OpenCV编译MATLAB绑定

    我正在尝试编译OpenCV 3.0的MATLAB绑定,即 Github的当前版本.我一直收到以下错误: CMake Error at /opencv/modules/matlab/compile.cm ...

  10. matlab 数学库,matlab数学函数库

    (n) 求 n 的阶乘 如何用 matlab 配方 没有发现 matlab 有这一命令,不过我们可以调用 maple 的命令,调用方法如下: 首先加载 maple 中的 student 函数库,加载. ...

最新文章

  1. ITK VTK CTK QT 跨平台联合开发之 一
  2. Mysql创建、删除用户
  3. 深度学习:tensorflow层次结构,朴素NN代码实现tensorflow
  4. 洛谷 - P3389 【模板】高斯消元法(高斯消元解方程)
  5. php curl用法
  6. 在恰当的地方使用MongoDB的WriteConcern.SAFE参数
  7. 基因编辑婴儿追踪:该被编辑的是我们的心
  8. 剖析Caffe源码之Layer_factory
  9. 4.maven中常用的构建命令
  10. 为GridView-Delete列添加确认对话框(2种方法)
  11. 直击标贝科技WAIC2019:深耕语音合成与数据服务 助力语音场景完美落地
  12. jqprint插件打印去掉页眉页脚的方式
  13. 无线网络和本地连接同时启用后,无线网络无法使用。
  14. 运动世界校园 校园跑 不想跑步人的福利
  15. 怎么样可以调用阿里云短信服务接口实现短信验证码
  16. 一键启动及自启动程序
  17. 火狐浏览器无法正常访问(ADsafe)
  18. 单灯控制器是什么及其工作原理分析
  19. 键盘鼠标驱动安装 Vware遗留症 HP驱动
  20. python - 在线答题程序

热门文章

  1. SAP Spartacus central configuration - B2cStorefrontModule
  2. hybris impex里的小括号语法
  3. 阮一峰react demo代码研究的学习笔记 - demo7 debug - how ref node is attached
  4. How is navigation target url request handled by backend
  5. 利用chrome的Timeline观测系统的内存回收逻辑
  6. web service security profile的设计
  7. Another approach to enable table edit in SE16
  8. Spring源码研究之how is returned hello string converted to jsp page
  9. SAP云平台上应用的HTTPS证书
  10. SAP Customer Data Cloud(Gigya)的用户搜索实现 1