在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
注:该过程相当于把16的矩阵,转化为23的矩阵,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
原文链接: https://www.cnblogs.com/zzzsj/p/14631379.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/209422
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!