matlab调用opencv库,matlab调用opencv库
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库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php动态+trait,详解PHP神奇又
- 下一篇: TCL QD-MiniLED 电视新品将