在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