使用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.使用MATLAB 提供的MAT 文件接口函数
在C/C++程序中有两种方式可以读取MAT文件数据。利用MATLAB提供的有关MAT文件的编程接口函数。MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。如表1所示。
表1 C语言中的MAT文件读写函数
MAT 函 数 功 能
matOpen打开 MAT 文件
matClose关闭 MAT 文件
matGetDir从 MAT 文件中获得 MATLAB 阵列的列表
matGetFp获得一个指向MAT 文件的ANSI C 文件指针
matGetVariable从MAT文件中读取MATLAB阵列
matPutVariable写MATLAB阵列到MAT文件
matGetNextVariable从MAT文件中读取下一个MATLAB阵列
matDeleteVariable从MAT文件中删去下一个MATLAB阵列
matPutVariableAsGlobal从MATLAB阵列写入到MAT文件中
matGetVariableInfo从MAT文件中读取MATLAB阵列头信息
matGetNextVariableInfo从MAT文件中读取下一个MATLAB阵列头信息
4.程序举例
读取.mat文件,并把mat内容存储在图像中并显示。
注意:在Studio中一定要注意,默认读取.mat的方式是按列读取,不是按行读取。这是matlab数据存储的特色!
#include "stdafx.h" int loadMat(Mat& regId)
{ MATFile *pmat;
const char **dir;
const char *file;
const char *name;
int ndir;
mxArray *pa; file="D:/labels3_ms.mat";//双反斜杠防止转义
pmat=matOpen(file, "r");//打开文件,返回指向文件指针
if (pmat == NULL) {
cout<<"Error opening file"<<file<<endl;
return();
} dir = (const char **)matGetDir(pmat, &ndir); //ndir 表示mat文件中含有矩阵数目
if (dir == NULL) {
std::cout<<"Error reading directory of file"<<file<<endl;
return();
}
else
{
cout<<"Error opening file"<<file<<endl;
for (int i=; i < ndir; i++)
cout<<"Mat NUM: "<<dir[i]<<endl;//输出所含矩阵数目
}
pmat=matOpen(file, "r");//重新打开文件;
pa = matGetNextVariable(pmat, &name); //返回指向文件头文件信息的指针,指针类型为*mxArray;
//name 是矩阵的名字;
cout<<name<<endl;
pmat=matOpen(file, "r");
int ii=mxGetM(pa);//矩阵行数400
int jj=mxGetN(pa);//矩阵列数300
int *pm=(int*)mxGetPr(pa); //获取矩阵数值,返回指向矩阵第一数值的指针;
regId=Mat::zeros(jj,ii,CV_8UC1); map<<span>int,int>regSize;
int m=;
for (int r=;r
{
int n=;
m++;
uchar *id=regId.ptr(r);
for (int c=;c
{
id[c]=(*pm);
pm++;
regSize[*pm]++;
}
} cout<<"regSize:"<<regSize.size()<<endl;
// for(map::iterator iter=regSize.begin();iter!=regSize.end();iter++)
// {
// cout<<iter->first<<" size: "<<iter->second<<endl;
// } mxFree(dir);
// //normalize(regId,regId,0,1,CV_MINMAX,CV_32FC1);
regId=regId.t();
//imshow("show",regId);
//waitKey();
//imwrite("D:/regId1.jpg",regId);
//return 1;
return regSize.size();
}
使用VS2010调用matlab的mat格式文件的更多相关文章
- 开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式
原文:[原创]开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式 开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET( ...
- 【原创】开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- 【转】matlab针对不同格式文件的读写
本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...
- vs2010调用matlab2011下的.m文件
很幸运在网上找到了采用引擎的方法,用vs2009调用matlab2008下的.m文件:但个人的环境是vs2010+matlab2011;想着二者差不多,故将s2010调用matlab2008拿来试试: ...
- java 调用OpenOffice将word格式文件转换为pdf格式
一:环境搭建 OpenOffice 下载地址http://www.openoffice.org/ JodConverter 下载地址http://sourceforge.net/projects/jo ...
- Matlab保存uint16格式文件的相关注意事项
在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算.在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型.如果 ...
- 【转】Java读取matlab的.mat数据文件
参考:Java读取mat文件 下载链接:ujmp jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...
- matlab 生成mat文件
生成MAT文件 假如你的矩阵A.B都已赋值,现在需要将A,B矩阵保存成mat格式文件,执行如下命令:save mydata A B 就会把A B矩阵数据保存在yourdata.dat文件中了 保存指定 ...
- VS2015调用matlab Plot函数
最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...
随机推荐
- js 判断页面加载状态
//----判断当前页面是否加载状态 开始 ---- document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function ...
- SVN 提交必填备注Commit
操作方法:在SVN的Repositories下,找到要配置的项目,在项目目录下找到hooks文件夹,在其下创建pre-commit.bat文件,把下面复制进去就可以了(无需重启,如果改动,保存bat文 ...
- EasyUI + EF + MVC4 后台截图
到目前完成的页面截图,完成了增删改查几项功能的技术测试,在解决几个小问题,就重新设计结构开始一个完整的后台开发,坚持用博客和云笔记记录开发过程.
- oracle安装完成后解锁scott用户
需要以管理员的身份 进行 解锁scott alter user scott account unlock;
- hdu 4707 Pet(DFS水过)
http://acm.hdu.edu.cn/showproblem.php?pid=4707 [题目大意]: Lin Ji 的宠物鼠丢了,在校园里寻找,已知Lin Ji 在0的位置,输入N D,N表示 ...
- linux 命令 备忘
openssl rand -base64 32 随机数 date | md5sum data 日期 cal 日历 man -f man sync 数据同步写入磁盘 shutdown reboot ha ...
- MVC4多语言IHttpModule实现
最近项目需要多语言环境了. 由于项目页面较多,逐个Action去读取资源文件不大现实.就想到了使用 IHttpModule配合MVC的路由规则来实现. 首先创建以个mvc4的应用程序,添加资源文件夹( ...
- Hibernate-Validation的使用
首先是要加入下面两个包 hibernate-validator-4.1.0.Final.jar validation-api-1.0.0.GA.jar 如果在验证不通过的时候进行了添加.更新或删除操作 ...
- "Principles of Reactive Programming" 之<Actors are Distributed> (2)
Actor Path 我们知道actor是有层级的(hierarchical),第.每个actor在它的父actor的名字空间下都有一个名字.这样就构成了一个树状的结构,就像是文件系统.每个actor ...
- Unity寻路的功能总结
源地址:http://blog.csdn.net/sgnyyy/article/details/21878163 1. 利用Unity本身自带的NavMesh 这篇文章已经比较详细,可能对于很多需要a ...