我这里的环境是window 7+vs2010+matlab R2010b。
首先需要输入mex -setup来确定需要使用的编译器,基本按照提示一步步下来就行了。
下面是写c++文件,这里写的c++文件名就是将来要调用的函数名,我这里是SUM.cpp
SUM.cpp:
#include "mex.h" //必须有这个 //调用形式 re=SUM(arr0,arr1),将两个矩阵相加赋值给结果矩阵。 //nlhs:输出参数个数 //plhs:输出参数列表 //nrhs:输入参数个数 //prhs:输入参数列表 void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[]) //相当于一般的main()了 { int M0 = mxGetM(prhs[0]); //得到arr0的行数 int N0 = mxGetN(prhs[0]); //得到arr0的列数 double* pArr0 = (double*)mxGetPr(prhs[0]); //得到arr0的指针 int M1 = mxGetM(prhs[1]); int N1 = mxGetN(prhs[1]); double* pArr1 = (double*)mxGetPr(prhs[1]); if(M0!=N0||M1!=N1) mexErrMsgTxt("两个矩阵行列应该相等"); plhs[0] = mxCreateDoubleMatrix(M0, N0, mxREAL); //创建一个M0行,N0列的矩阵 double* pRe =(double*)mxGetPr(plhs[0]); for(int i=0;i<M0;i++) { for (int j=0;j<N0;j++) { pRe[i*N0+j]=pArr0[i*N0+j]+pArr1[i*N0+j]; //两个矩阵逐个相加给结果矩阵 } } }
将SUM.cpp放入当前目录,在终端输入mex SUM.cpp就能生成SUM.mexw32,生成的这个文件就可以认为是SUM()函数了,可以直接按调用规范来调用了。
我这里就将两个图像相加了main.m:
clear all; close all; clc; a=imread('rice.png'); a=double(a); b=imread('cameraman.tif'); b=double(b); re=SUM(a,b); re=mat2gray(re); imshow(re);
最后的结果: