说明:本文为博主在学习过程中的学习笔记,和大家分享,未经博主允许不得转载。
MATLAB 有强大的计算,但是计算速度显然跟不上。因此,有时候在代码中插入c /c++代码必不可少。本文为大家介绍如何插入c /c++代码。
详细的代码下载地址:http://download.csdn.net/detail/xiaoyanghijk/9618136
初步的生成mexw64的步骤可以参考上一个博客的例子: http://blog.csdn.net/xiaoyanghijk/article/details/52370459
这里给个更为详细的例子,输入两个数组(比如图像),中间处理,输出一个数组(比如图像):
1) 在当前路径下写一个 Array_add.cpp 文件
#include "mex.h"
//目的,输入两个维数一样的二维数组,经过处理,输出一个维数一样的数组
//输入 arr1 arr2 arr3
//输出 out_arr= arr1 +arr2
//MATLAB调用形式: [resizedArr, resizedDims] = ResizeArray(arr, selRows, sekCols)
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if (nrhs != 3)
{
mexErrMsgTxt("参数个数不正确!");
}
int rowNum1 = mxGetM(prhs[0]);//prhs[0] 第一个输入参数的指针
int colNum1 = mxGetN(prhs[0]);
mexPrintf("第一个输入参数的行 rowNum %d ",rowNum1);
mexPrintf("第一个输入参数的列colNum %d ",colNum1);
mexPrintf("\n");
int rowNum2 = mxGetM(prhs[1]); //prhs[1] 第二个输入参数的指针
int colNum2 = mxGetN(prhs[1]);
mexPrintf("第二 个输入参数的行 rowNum %d ",rowNum2);
mexPrintf("第二个输入参数的列colNum %d ",colNum2);
mexPrintf("\n");
int rowNum3 = mxGetM(prhs[2]); //prhs[2] 第三个输入参数的指针
int colNum3 = mxGetN(prhs[2]);
mexPrintf("第三 个输入参数的行 rowNum %d ",rowNum3);
mexPrintf("第三个输入参数的列colNum %d ",colNum3);
mexPrintf("\n");
......... 代码太长了,下载地址:http://download.csdn.net/detail/xiaoyanghijk/9618136
mexPrintf("\n") ;
}
mexPrintf("OK!\n");
}
第二步:在命令窗口中输入:mex Array_add.cpp 生成Array_add.mexw64 文件。
第三步:测试:
输入:
arr1=[1 2 3 ;4 5 6 ;7 8 9 ]
arr2=[ 8 4 5 ;7 8 2 ;6 9 8 ]
arr3=3
[out_arr]=Array_add(arr1,arr2,arr3)
输出:
第一个输入参数的行 rowNum 3 第一个输入参数的列colNum 3
第二 个输入参数的行 rowNum 3 第二个输入参数的列colNum 3
第三 个输入参数的行 rowNum 1 第三个输入参数的列colNum 1
打印第一个输入数组数据:
1.000000 2.000000 3.000000
4.000000 5.000000 6.000000
7.000000 8.000000 9.000000
打印第二个输入数组数据:
8.000000 4.000000 5.000000
7.000000 8.000000 2.000000
6.000000 9.000000 8.000000
打印第三个输入数组数据:
3.000000
打印输出数据:
9.000000 6.000000 8.000000
11.000000 13.000000 8.000000
13.000000 17.000000 17.000000
OK!
out_arr =
9 6 8
11 13 8
13 17 17