在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
}