Matlab代碼轉C++(二) —— mwArray


本文主要介紹: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類型有:

  1. typedef enum  
  2. {  
  3.     mxUNKNOWN_CLASS = 0, //未知類型  
  4.     mxCELL_CLASS, //細胞類型  
  5.     mxSTRUCT_CLASS, //結構類型  
  6.     mxLOGICAL_CLASS, //布爾類型  
  7.     mxCHAR_CLASS,  //字符串類型  
  8.     mxVOID_CLASS,  //void類型  
  9.     mxDOUBLE_CLASS,   
  10.     mxSINGLE_CLASS, //單精度浮點數  
  11.     mxINT8_CLASS, //  
  12.     mxUINT8_CLASS,  
  13.     mxINT16_CLASS,  
  14.     mxUINT16_CLASS,  
  15.     mxINT32_CLASS,  
  16.     mxUINT32_CLASS,  
  17.     mxINT64_CLASS,  
  18.     mxUINT64_CLASS,  
  19.     mxFUNCTION_CLASS, //函數類型  
  20.     mxOPAQUE_CLASS, //  
  21.     mxOBJECT_CLASS  //對象類型  
  22. }  
save_snippets.png
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>矩陣賦初值:

  1. int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(2,3,mxINT32_CLASS);    
  3. A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols  
save_snippets.png
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

需這樣賦值:

  1. <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(3,2,mxINT32_CLASS);  //修改此處:行列數互換  
  3. A.SetData(a,6); //第二個參數爲要設置的數的個數,大小可設爲rows*cols  
save_snippets.png
<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文件。

尤其是,在圖像處理時,如果傳遞的矩陣爲圖像數據矩陣,要採用後一種方法賦值,否則,圖像會嚴重變形失真。二、字符串賦值

  1. char str[5] = "abcd";  
  2. //或 CString str = "abcd"  
  3. mwArray mwA(str);  
save_snippets.png
char str[5] = "abcd";
//或 CString str = "abcd"
mwArray mwA(str);

該過程比較簡單。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章