matlab调用opencv库
2013-04-10 15:07
513 查看
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%\VCPackages;%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’);即可调用。
看到网上有两种不同的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%\VCPackages;%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与C/C++混合编程之Matlab调用OpenCV库函数
- matlab调用opencv2.4
- matlab和C/C++混合编程--调用opencv
- OpenCV学习笔记(12)OpenCV调用Matlab函数进行保存视频的尝试
- [项目实战派]opencv通过dll调用matlab函数,图片作为参数
- matlab 2014b 调用 vs2013 + opencv混合编程配置、mat 与 mxarray的转换、matlab在vs2013中调试
- matlab调用opencv的函数
- [转] matlab调用opencv函数的配置
- matlab程序修改 批量人脸检测(调用opencv训练好的xml )
- Matlab、C++混合编程调用OpenCV
- Matlab调用Opencv
- 怎么把matlab 训练的model 保存下来 然后在opencv 中调用
- matlab调用opencv
- matlab 调用opencv函数方法及matlab编译c++程序
- MATLAB调用OpenCV2.4库函数的全过程及问题解决
- matlab调用opencv函数的配置
- VS与Matlab混合编程, 调用Opencv环境配置 以及相关说明
- [置顶] 如何在c++ / opencv 中调用matlab 的图像数据
- matlab和C/C++混合编程--调用opencv