使用VS调用matlab的mat格式文件.docx

上传人:b****5 文档编号:6020929 上传时间:2023-01-03 格式:DOCX 页数:6 大小:16.03KB
下载 相关 举报
使用VS调用matlab的mat格式文件.docx_第1页
第1页 / 共6页
使用VS调用matlab的mat格式文件.docx_第2页
第2页 / 共6页
使用VS调用matlab的mat格式文件.docx_第3页
第3页 / 共6页
使用VS调用matlab的mat格式文件.docx_第4页
第4页 / 共6页
使用VS调用matlab的mat格式文件.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

使用VS调用matlab的mat格式文件.docx

《使用VS调用matlab的mat格式文件.docx》由会员分享,可在线阅读,更多相关《使用VS调用matlab的mat格式文件.docx(6页珍藏版)》请在冰豆网上搜索。

使用VS调用matlab的mat格式文件.docx

使用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&regId)

{

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1