使用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来编写信号处理代码,最 ...
随机推荐
- PHP视频教程 > PHP面向对象编程视频教程
当前位置: 主页 > 编程开发 > PHP视频教程 > PHP面向对象编程视频教程 > kingstone金士顿手机内存卡16G仅65元 1.1.什么是面向对象和类 上传日期: ...
- TCO 2014 Round 1C 概率DP
TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...
- 商品库存SKU
一种解决方案(性能垃圾,基本实现功能)商品表 属性集表 属性表 属性值表 SKU表 SKU选项表 属性集和属性之间的中间表表关系商品表 *--------------1 属性集表属性集表 *- ...
- filter_map
#!/usr/bin/env python # -*- coding:utf-8 -*- ret = filter( lambda x: x < 3, [1, 2, 3, 4, 5]) prin ...
- ORA-01034:oracle不可用 的解决方法
晚上打开SQLPlus输入用户名和密码老是登不了,出现如上一行代码 "ORA-01034:ORACLE不可用"的错误 解决思路: 1.检查服务是否启动, 2.如果已经启动,说明数据 ...
- vs中的主题配置
比较讨厌vs的默认字体颜色及背景,代码看久了就受不了.不过自己手动配置的话还是比较麻烦的,这里有一个网站(http://studiostyl.es/)提供了很多主题,一般都是背景比较深色的,对眼睛比较 ...
- AMH4.2 虚拟主机面板Tengine版本
本人将原版Nginx更换成淘宝的Tengine 2.1.0 并且更换安装源,以保证面板正常安装 AMH4.2 修改版安装 ———————AMH为独立的一套LNMP/Nginx虚拟主机面板 安装请使用纯 ...
- Atmel Studio 6.0 重新安装
问题描述: Atmel Studio 6.0 重新安装 在卸载Atmel Studio6.0之后,重新安装Atmel Studio6.0软件,提示cannot find one ...
- bzoj 1222: [HNOI2001]产品加工 dp
1222: [HNOI2001]产品加工 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 381 Solved: 218[Submit][Status ...
- 基于局部敏感哈希的协同过滤算法之simHash算法
搜集了快一个月的资料,虽然不完全懂,但还是先慢慢写着吧,说不定就有思路了呢. 开源的最大好处是会让作者对脏乱臭的代码有羞耻感. 当一个做推荐系统的部门开始重视[数据清理,数据标柱,效果评测,数据统计, ...