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);

    最后的结果:

  • 相关阅读:
    一文详解ORB-SLAM3
    模块、进程、线程回调函数的逆向
    EPT的开启与处理
    VT MSR、CR、 Exception、#PF
    VT MTF VM-Exit
    VT技术对于除零异常的拦截与派发到3号中断
    异常与中断
    KVM_SET_SREGS 64位设置错误
    SQL注入实验学习笔记
    Pwn之简单patch
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2932740.html
Copyright © 2011-2022 走看看