前言

  Qt可通过matlab的库对mat文件进行读写,第三方库matio也可以对mat文件进行读写,其已经支持mat文件的7.3版本。

 

libmatio库介绍

  matio软件包含一个用于读写MATLAB MAT fles的库。libmatio库是创建/打开MAT fles和写入的主要接口。
  matio库可以编写版本5的MAT fles,版本5的fles带有可变压缩(如果使用zlib构建),以及支持引入的HDF5格式MAT file,即MATLAB 7.3版。

 

下载

  Git地址:git clone https://github.com/tbeu/matio.git
  官网:https://www.hdfgroup.org
  QQ群:1047134658(点击“文件”搜索“matio”,群内与博文同步更新)

 

Window上编译(从源码使用VS工程直接编译)

  编译环境:VS2015(vs14版本)。

步骤一:下载解压

  

步骤二:打开源码工程

  使用VS2015打开库中间的matio.sln(此处笔者是VS2017装了VS2015的MSVC编译器),如下图:
  
  
  
  修改编译器版本
  

步骤三:编译libmatio,出现无法打开”zlib.h”解决

  开始编译,出现错误如下:
  

  需要编译zlib库的x64版本,请参照博文《zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板》。
  将zlib头文件和库引入到libmatio工程中。
  头文件路径:
  
  库文件路径:
  
  库引入:
  
  意味着还缺少hdf5文件,还需要添加hdf5的msvc2015x64版本,暂时先不管,本步骤解决zlib问题,继续编译。

步骤四:编译libmatio,出现无法打开”hdf5.h”,解决

  编译hdf5,请参考文章:《Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本
   
  
  发现不行,重新打开定位安装文件:
  
  
  
  解决后,继续编译。

步骤五:编译libmatio,调用参数太少

  

  打架,只剩下可能是2个库的升级依赖导致的问题,matio不兼容hdf5的三个大版本的api。

步骤五:更换hdf5版本

  重新定义版本,Matio:1.5.12(与之前一样),Hdf5:1.8.22(前面使用的是1.12.x),即更换hd5的版本即可。
  hdf5的编译,请参照博文《Hdf5开发笔记(一):hdf5介绍,编译和基础模板Demo》
  然后更改包含的路径:
  

  
  至此,此种方法编译失败,其库的参数调用几个版本的函数调用都没有这个,摸索后基本放弃,只能另寻他法。

 

Window上编译(CMake方式编译)

  编译环境:VS2015(vs14版本)。

步骤一:下载解压

  直接git的
  

步骤二:CMake配置

  
  
  编译hdf5,请参考文章:《Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本
  添加HDF5的路径,如下图:
  
  zlib编译,请参照博文《zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板》。
  添加zib,如下图:
   
  添加zlib的路径,如下图:
  
  配置通过:
  

步骤三:生成工程

  

步骤四:打开工程

   

步骤五:工程生成

  打开工程后,编译
  

步骤六:安装

  

 

模块化

  

 

Demo

bool MatlabManager::openMatFile(QString filePath)
{
mat_t *pMatFile = 0;
matvar_t *pMatVar = 0;
// 打开mat文件
pMatFile = Mat_Open(filePath.toUtf8().data(), MAT_ACC_RDONLY);
if(!pMatFile)
{
LOG << "Failed to Mat_Open(filePath.toUtf8().data(), MAT_ACC_RDONLY)";
return false;
}
// 遍历所有变量
pMatVar = Mat_VarReadNext(pMatFile);
while(pMatVar)
{
LOG << "read variable ============================="
<< "pMatVar->name:" << pMatVar->name << endl
<< "pMatVar->rank:" << pMatVar->rank << endl
<< "pMatVar->dims:" << pMatVar->dims << endl
<< "pMatVar->class_type:" << pMatVar->class_type << endl
<< "pMatVar->data_type:" << pMatVar->data_type << endl
<< "pMatVar->isComplex:" << pMatVar->isComplex << endl
<< "pMatVar->isLogical:" << pMatVar->isLogical << endl
<< "pMatVar->isGlobal:" << pMatVar->isGlobal << endl;
// 释放
Mat_VarFree(pMatVar);
pMatVar = 0;
// 继续遍历
pMatVar = Mat_VarReadNextInfo(pMatFile);
}
// 关闭mat文件
Mat_Close(pMatFile);
pMatFile = 0; return true;
}
 

Demo测试

double数据类型

  
  
  

struct+doubleSeries类型

  先解析的是struct
  

doubleSeries数据类型

  
  查看文档也只支持这几种类型特殊文件
  
  doubleSeries是不支持的

 

工程模板

  testMatioDemo_工程模板_v1.0.0_基础调用matio库成功遍历文件.rar

libmatio开发笔记(一):matlab文件操作libmatio库介绍,编译和基础Demo的更多相关文章

  1. libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板

    前言   Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库,编译过了windows版本,有需求编译一个ubuntu版本的,交叉编译需求的同样可参照本文章 ...

  2. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...

  3. zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板

    前言   Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.需要用到zlib的msvc2015x64版本,编译一下.   版本编译引导 zlib在windows上的mingw32 ...

  4. Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

    前言   QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...

  5. libzip开发笔记(一):libzip库介绍、编译和工程模板

      前言   Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库.   libzip   libzip是一个C库,用于读取,创建和修改zip档案.可以从数 ...

  6. 《Windows内核安全与驱动开发》4.1 文件操作

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.1 文件操作 从 C:\a.txt 中读取一部分内容并利用 DbgPrin ...

  7. Matlab文件操作

    1.  Matlab文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件. 2.  fid=fopen(文件名,打开方式) 'r' 只读,文件必须存在(缺省的打开方式) 'w' ...

  8. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  9. (Unity)XML文件读写与IO文件操作类使用介绍

    using System.Xml;                //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...

  10. matlab文件操作及读txt文件(fopen,fseek,fread,fclose)

    文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件.MATLAB提供了一系列低层输入输出函数,专门用于文件操作. 1.文件的打开与关闭 1)打开文件 在读写文件之前,必须先用f ...

随机推荐

  1. [转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

    文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据).写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘.这对加 ...

  2. [转帖]自动化运维:一键自动化脚本-shell

    https://www.cnblogs.com/luoahong/articles/8456203.html shell函数 1.分别在服务器和客户端上创建www用户 1 2 useradd www ...

  3. [转帖]Shell~echo -e 颜色输出

    https://www.cnblogs.com/ElegantSmile/p/11144879.html echo -e 可以控制字体颜色和背景颜色输出 从一个例子开始: # echo -e &quo ...

  4. vim配置的学习与总结

    摘要 有时候在linux里面操作需要使用粘贴以及其他处理. 很多发行版, 遇到 # 会自动退格, 很难受. 想着能够处理一下vim的默认设置可以好很多. 所以这里简单总结一下. 配置文件 vim的配置 ...

  5. vue中父传子props的使用

    第一种 传递一个数组 props:["cont"] 第二种 传递一个对象 props:{ uploadOption:{ type:Object, 参数类型必须是一个对象 requi ...

  6. C++ CryptoPP使用AES加解密

    Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库.它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密.非对称加密.哈希函数.消息认证码 (MAC).数字签名等.C ...

  7. 19.5 Boost Asio 传输结构体

    同步模式下的结构体传输与原生套接字实现方式完全一致,读者需要注意的是在接收参数是应该使用socket.read_some函数读取,发送参数则使用socket.write_some函数实现,对于套接字的 ...

  8. 最新版Emlog采集发布插件-免费下载

    推荐一款可以自动采集网页文章数据,并发布到Emlog网站的Emlog采集发布插件(兼容最新的Emlog Pro版本,也兼容之前的 Emlog 5.3 和 Emlog 6.0 版本),支持对接简数采集器 ...

  9. 【C语言深度解剖】一篇解决程序的环境【编译+链接详解】让面试官给我们竖起大拇指

    文章目录 程序的翻译环境 翻译环境详解 编译 预编译 编译 汇编 关于形成符号表 链接 运行环境 尾声 [C语言深度解剖][Linux操作系统]程序的环境[编译+链接详解] 那么这里博主先安利一下一些 ...

  10. webrtc终极版(一)5分钟搭建多人实时会议系统webrtc

    webrtc终极版(一),支持https,在线部署[不是本地demo],采用RTCMultiConnection官方demo,5分钟即可搭建成功 @ 目录 webrtc终极版(一),支持https,在 ...