使用VS调用matlab的mat格式文件.docx
- 文档编号:6020929
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:6
- 大小:16.03KB
使用VS调用matlab的mat格式文件.docx
《使用VS调用matlab的mat格式文件.docx》由会员分享,可在线阅读,更多相关《使用VS调用matlab的mat格式文件.docx(6页珍藏版)》请在冰豆网上搜索。
使用VS调用matlab的mat格式文件
使用VS2010调用matlab的mat格式文件
做实验需要将matlab实现的meanshift的结果中的region的Iabels矩阵,需要把labels.mat读入VS2010中,实现功能,在此把实现过程记录下来:
C++读取mat文件:
1.vs2010的配置
新建一个工程,在属性管理器中选择工程->属性->VC++目录。
设置包含目录为:
D:
\MATLAB\R2010a\extern\include(我的matlab装在D盘);
设置库目录为:
D:
\MATLAB\R2010a\extern\lib\win32\microsoft。
2.设置环境变量path
计算机->属性->高级系统设置->高级->环境变量
在Path中已经存在D:
\MATLAB_2011a\R2011a\bin\,但是D:
\MATLAB_2011a\R2011a\bin\win32下有个重要的libmat.dll。
如果不把d:
\MATLAB\R2010a\bin\改为D:
\MATLAB_2011a\R2011a\bin\win32程序将无法运行。
理论上D:
\MATLAB_2011a\R2011a\bin\应该会向深一步检索到libmat.dll。
坑爹的windows这一步并没有去做。
这步设置完后要重启(环境配置完毕)。
3.
3.使用MATLAB提供的MAT文件接口函数
在C/C++程序中有两种方式可以读取MAT文件数据。
利用MATLAB提供的有关MAT文件的编程接口函数。
MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。
如表1所示。
表1C语言中的MAT文件读写函数MAT函数
功能
matOpen
打开MAT文件
matClose
关闭MAT文件
matGetDir
从MAT文件中获得MATLAB阵列的列表
matGetFp
获得一个指向MAT文件的ANSIC文件指针
matGetVariable
从MAT文件中读取MATLAB阵列
matPutVariable
写MATLAB阵列到MAT文件
matGetNextVariable
从MAT文件中读取下一个MATLAB阵列
matDeleteVariable
从MAT文件中删去下一个MATLAB阵列
matPutVariableAsGlobal
从MATLAB阵列写入到MAT文件中
matGetVariableInfo
从MAT文件中读取MATLAB阵列头信息
matGetNextVariableInfo
从MAT文件中读取下一个MATLAB阵列头信息
4.程序举例:
读取.mat文件,并把mat内容存储在图像中并显示。
注意:
坑爹的默认读取.mat的方式是按列读取,不是按行读取,害的劳资瞎忙乎一晚上!
!
!
[cpp]viewplaincopyprint?
#include"stdafx.h"
/*intmain()*/
intloadMat(Mat®Id)
{
MATFile*pmat;
constchar**dir;
constchar*file;
constchar*name;
intndir;
mxArray*pa;
file="D:
/labels3_ms.mat";//双反斜杠防止转义
pmat=matOpen(file,"r");//打开文件,返回指向文件指针
if(pmat==NULL){
cout<<"Erroropeningfile"<
return
(1);
}
dir=(constchar**)matGetDir(pmat,&ndir);
//ndir表示mat文件中含有矩阵数目
if(dir==NULL){
std:
:
cout<<"Errorreadingdirectoryoffile"<
return
(1);
}
else
{
cout<<"Erroropeningfile"<
for(inti=0;i<ndir;i++)
cout<<"MatNUM:
"<
}
pmat=matOpen(file,"r");//重新打开文件;
pa=matGetNextVariable(pmat,&name);
//返回指向文件头文件信息的指针,指针类型为*mxArray;
//name是矩阵的名字;
cout<
pmat=matOpen(file,"r");
intii=mxGetM(pa);//矩阵行数400
intjj=mxGetN(pa);//矩阵列数300
int*pm=(int*)mxGetPr(pa);//获取矩阵数值,返回指向矩阵第一数值的指针;
regId=Mat:
:
zeros(jj,ii,CV_8UC1);
/*ofstreamout("D:
/abc.txt");*/
mapregSize;
intm=0;
for(intr=0;r
{
intn=0;
m++;
uchar*id=regId.ptr(r);
for(intc=0;c
{
id[c]=(*pm);
pm++;
regSize[*pm]++;
}
}
cout<<"regSize:
"<
//for(map:
:
iteratoriter=regSize.begin();iter!
=regSize.end();iter++)
//{
//cout<first<<"size:
"<second<
//}
mxFree(dir);
////normalize(regId,regId,0,1,CV_MINMAX,CV_32FC1);
regId=regId.t();
//imshow("show",regId);
//waitKey();
//imwrite("D:
/regId1.jpg",regId);
//return1;
returnregSize.size();
}
另附:
使用VS调用matlab的.m文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 VS 调用 matlab mat 格式文件