




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
部分转载已说明来源。原文地址:/zouxy09/article/details/20553007另一篇:/lukylu/p/3966871.html本人环境:matlab 2013 + VS2010 + opencv2.4.9首先:matlab中输入mex -setup 选择编译环境(我选的vs2010)接下来测试一个matlab+c的混编程序.(下面的例子是实现a+b)保存为.c或.cpp文件。我保存的是cvMexAdd.cpp#include mex.hdouble add(double x, double y) return x * y;/标准函数定义是:void mexFunction(int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs)/可以根据自己的喜欢修改变量名/* * nargout:输出变量数 * arrayout:输出数组指针 * nargin:输入变量数 * arrayin:输入数组指针 */void mexFunction(int nargout, mxArray *arrayout, int nargin, const mxArray *arrayin) if(nargin != 2)/输入参数。(最好不要在编程的时候用中文,这里为了方便观察) mexPrintf(输入参数要有2个.n); return; double *a; double b=1.0, c=2.0; arrayout0 = mxCreateDoubleMatrix(1, 1, mxREAL); a = mxGetPr(arrayout0); b = *(mxGetPr(arrayin0); c = *(mxGetPr(arrayin1); *a = add(b, c);然后在matlab中输入mex cvMexAdd.cpp最后cvMexAdd(1,2)测试一下接下来的怎么结合matlab+opencv就简单了。假如matlab中已经写好了一个opencv的cpp程序如下:功能是实现一张图片转换成灰度图.我保存的名称是:cvRGB2Gray.cpp/ Interface: convert an image to gray and return to Matlab/ Author : zouxy/ Date : 2014-03-05/ HomePage : /zouxy09/ Email : #include opencv2opencv.hpp#include mex.husing namespace cv;/*Usage: imageMatrix = RGB2Gray(imageFile.jpeg);Input: a image fileOutPut: a matrix of image which can be read by Matlab*/void exit_with_help()mexPrintf(Usage: imageMatrix = DenseTrack(imageFile.jpg);n);static void fake_answer(mxArray *plhs)plhs0 = mxCreateDoubleMatrix(0, 0, mxREAL);void RGB2Gray(char *filename, mxArray *plhs) mexPrintf(Hello3!n);/ read the imageMat image = imread(filename);if(image.empty() mexPrintf(cant open input file %sn, filename);fake_answer(plhs);return;/ convert it to gray formatMat gray;if (image.channels() = 3)cvtColor(image, gray, CV_RGB2GRAY);elseimage.copyTo(gray);imshow(gray,gray);/ convert the result to Matlab-supported format for returningint rows = gray.rows;int cols = gray.cols;plhs0 = mxCreateDoubleMatrix(rows, cols, mxREAL); double *imgMat; imgMat = mxGetPr(plhs0);for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) *(imgMat + i + j * rows) = (double)gray.at(i, j); void mexFunction(int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs) mexPrintf(Hello!n);if(nrhs = 1)char filename256;mxGetString(prhs0, filename, mxGetN(prhs0) + 1);if(filename = NULL)mexPrintf(Error: filename is NULLn);exit_with_help();return; mexPrintf(Hello2!n);RGB2Gray(filename, plhs);elseexit_with_help();fake_answer(plhs);return;我们编译他需要对matlab进行配置,并且编译的时候需要假如opencv的各种lib库文件,如果每一个文件都这么编译就非常麻烦。原文作者提供了一个类似makefile的代码,统一进行格式化处理,非常方便。代码是matlab的m文件,直接在matlab运行就可以了。% 作者: Jessica 日期: 2014-9-10 主页: /lukylu/% Matlab and C+ mixed programming(dependent on opencv library)% First step(before exeuting this program): use mex -setup to choose your c/c+ compilerclear all;% 判断系统位is_64bit = strcmp(computer,MACI64) | strcmp(computer,GLNXA64) | strcmp(computer,PCWIN64);%-我的是64位系统,注意下面的配置需要手动修改几个地方- % Notice: if your system is 64bit, your OpenCV must be 64bit! out_dir=./; %你的opencv路径,我的是d:/opencv include的路径写在-I后面 lib路径写在-L后面%如果你遇到问题,不放试一试x64或x86 或者用release调试,或者用debug调试(lib后面有d)%一定要根据自己的opencv路径和版本修改对应的位置CPPFLAGS = -O -DNDEBUG -I. -ID:opencvbuildinclude -ID:opencvbuildincludeopencv -ID:opencvbuildincludeopencv2; LDFLAGS = -LD:opencvbuildx64vc10lib; % your OpenCV lib path mypath is D:opencv.% LDFLAGS = -LD:opencvbuildx86vc10lib;%LIBS = -lopencv_calib3d249d -lopencv_contrib249d -lopencv_core249d -lopencv_features2d249d -lopencv_flann249d -lopencv_gpu249d -lopencv_highgui249d -lopencv_imgproc249d -lopencv_legacy249d -lopencv_ml249d -lopencv_nonfree249d -lopencv_objdetect249d -lopencv_photo249d -lopencv_stitching249d -lopencv_ts249d -lopencv_video249d -lopencv_videostab249d;LIBS = -lopencv_calib3d249 -lopencv_contrib249 -lopencv_core249 -lopencv_features2d249 -lopencv_flann249 -lopencv_gpu249 -lopencv_highgui249 -lopencv_imgproc249 -lopencv_legacy249 -lopencv_ml249 -lopencv_nonfree249 -lopencv_objdetect249 -lopencv_photo249 -lopencv_stitching249 -lopencv_ts249 -lopencv_video249 -lopencv_videostab249;if is_64bit CPPFLAGS = CPPFLAGS -largeArrayDims; end %你要编译的opencv程序compile_files = %the list of your code files which need to be compiled cvRGB2Gray.cpp ;%- %- % compilingfor k = 1 : length(compil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论