Matlab代码转C++(二) —— mwArray

    xiaoxiao2021-04-16  29

    本文主要介绍:matlab与C++结合的数据类型mwArray的一些基本知识,以及在C++中,如何对mwArray赋值,主要包括矩阵赋值和字符串赋值。

    首先,说明mwArray数据类型不同于mxArray,所以许多关于mxArray的用法,对mwArray不一定适用,具体区别见博文:

    http://www.cnblogs.com/kmliang/archive/2012/08/29/2662943.html

    一.矩阵赋值

    <1>mwArray 定义矩阵变量

      mwArray  A(rows, cols, type)

    参数说明:

       A       : 变量名

       rows:行数

       col   :列数

       type :数t据类型

    type类型有:

    [cpp] view plain copy print ? typedef enum  {      mxUNKNOWN_CLASS = 0, //未知类型      mxCELL_CLASS, //细胞类型      mxSTRUCT_CLASS, //结构类型      mxLOGICAL_CLASS, //布尔类型      mxCHAR_CLASS,  //字符串类型      mxVOID_CLASS,  //void类型      mxDOUBLE_CLASS,       mxSINGLE_CLASS, //单精度浮点数      mxINT8_CLASS, //      mxUINT8_CLASS,      mxINT16_CLASS,      mxUINT16_CLASS,      mxINT32_CLASS,      mxUINT32_CLASS,      mxINT64_CLASS,      mxUINT64_CLASS,      mxFUNCTION_CLASS, //函数类型      mxOPAQUE_CLASS, //      mxOBJECT_CLASS  //对象类型  }   typedef enum { mxUNKNOWN_CLASS = 0, //未知类型 mxCELL_CLASS, //细胞类型 mxSTRUCT_CLASS, //结构类型 mxLOGICAL_CLASS, //布尔类型 mxCHAR_CLASS, //字符串类型 mxVOID_CLASS, //void类型 mxDOUBLE_CLASS, mxSINGLE_CLASS, //单精度浮点数 mxINT8_CLASS, // mxUINT8_CLASS, mxINT16_CLASS, mxUINT16_CLASS, mxINT32_CLASS, mxUINT32_CLASS, mxINT64_CLASS, mxUINT64_CLASS, mxFUNCTION_CLASS, //函数类型 mxOPAQUE_CLASS, // mxOBJECT_CLASS //对象类型 } 整体含义是:定义矩阵A,行数为:rows,列数为:cols,类型为:type

    注: 如果参数不是矩阵,只是一个数,令 rows=1,cols=1即可。

    <2>矩阵赋初值:

    [cpp] view plain copy print ? int a[6] = {1,2,3,4,5,6}  mwArray A(2,3,mxINT32_CLASS);    A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols   int a[6] = {1,2,3,4,5,6} mwArray A(2,3,mxINT32_CLASS); A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols 注:该过程相当于把1*6的矩阵,转化为2*3的矩阵,matlab转化顺序是,先排第一列,由上到下为a[0] a[1],然后排第二列,由上到下为a[2] a[3],即转化后的A为:

    1     3      5

    2     4      6

    如果要使A为:

    1      2     3

    4      5     6

    需这样赋值:

    [cpp] view plain copy print ? <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}  mwArray A(3,2,mxINT32_CLASS);  //修改此处:行列数互换  A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols   <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6} mwArray A(3,2,mxINT32_CLASS); //修改此处:行列数互换 A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols

    此时生成的A为:

    1      4

    2      5

    3      6

    该矩阵转置之后,既可以达到所需形式,转置过程可以在matlab的.m文件中添加,先修改.m,然后在生成dll、lib、h文件。

    尤其是,在图像处理时,如果传递的矩阵为图像数据矩阵,要采用后一种方法赋值,否则,图像会严重变形失真。二、字符串赋值

    [cpp] view plain copy print ? char str[5] = "abcd";  //或 CString str = "abcd"  mwArray mwA(str);   char str[5] = "abcd"; //或 CString str = "abcd" mwArray mwA(str); 该过程比较简单。

    转载请注明原文地址: https://ju.6miu.com/read-672082.html

    最新回复(0)