matlab练习程序(matlab调用c/c++)

我这里的环境是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);

最后的结果:

原文地址:https://www.cnblogs.com/tiandsp/p/2932740.html