C++ -- mwArray用法


在vc中調用MATLAB產生的組建時,需要將vc中的參數轉換成mwArray格式。

對mwArray賦值,主要包括矩陣賦值和字符串賦值。

一.矩陣賦值

<1>mwArray 定義矩陣變量

            mwArray  A(rows, cols, type)

            參數說明:

  •  A  : 變量名
  • rows:行數
  • col   :列數
  • type :數t據類型

整體含義是:定義矩陣A,行數為:rows,列數為:cols,類型為:type

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  //對象類型  
}

注: 如果參數不是矩陣,只是一個數,令 rows=1,cols=1即可。

<2>矩陣賦初值:

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

需這樣賦值:

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文件。

尤其是,在圖像處理時,如果傳遞的矩陣為圖像數據矩陣,要采用后一種方法賦值,否則,圖像會嚴重變形失真。

二、字符串賦值

char str[5] = "abcd";  
//或 CString str = "abcd"  
mwArray mwA(str); 

該過程比較簡單。

 

DEMO:

void MainWindow::on_pushButton_clicked()
{
    mwArray aa(1,1,mxDOUBLE_CLASS,mxREAL);
    mwArray bb(1,1,mxDOUBLE_CLASS,mxREAL);
    mwArray cc(1,1,mxDOUBLE_CLASS,mxREAL);

    //參數賦值
    double a[1]={111};       //input
    double b[1]={5};          //input
    double c[1];                  //output

    aa.SetData(a,1);           //把a的值賦給aa
    bb.SetData(b,1);           //把b的值賦給bb
    testmat(1,cc,aa,bb);     //目標函數
    cc.GetData(c,1);           //獲取輸出值cc

    ui->label->setText(QString::number(c[0]));   //顯示輸出值c
}

 

 

轉載於:https://my.oschina.net/zengjs275/blog/730358


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM