zoukankan      html  css  js  c++  java
  • 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);

    最后的结果:

  • 相关阅读:
    JAVA多线程(七) ReentrantLock原理分析
    JAVA多线程(六) synchronize原理分析
    JAVA多线程(五) volatile原理分析
    pandas
    从美国总经理,到三一重卡的董事长,梁林河的重卡梦
    【转载】低水平领导的十大表现
    kill及其衍生程序
    python -m venv 的使用
    Python多版本启动器
    Pyinstaller最流行的打包程序
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2932740.html
Copyright © 2011-2022 走看看