前言

  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. [转帖]一次操作系统报错OutOfMemory Error的处理记录

    在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to contin ...

  2. Linux无头模式使用mat分析dump的方法

    摘要 mat可以很好的进行jvm的内存dump的分析. 但是大部分服务器是没有GUI界面的. 而且就算是有GUI界面也很难直接使用. 但是随着jvm堆区越来越大. WindowsPC机器已经很难进行分 ...

  3. acme.sh的简单学习过程

    acme.sh的简单学习过程 背景 公司内部测试环境为了节约费用(不要学我) 自己花十块到一百块之前从腾讯云购买一个域名 然后使用NDSPOD进行解析内网IP地址 偶尔需要申请临时证书进行HTTPS的 ...

  4. [专题]测试发现部分NVMe SSD的掉电数据保护功能让人失望

    https://www.cnbeta.com/articles/tech/1240441.htm 这个有点过分了. 苹果开发者 Russ Bishop 在一份测试报告中指出:即使掉电保护已经是个绕不开 ...

  5. Ubuntu18.04 安装Postgresql12

    Postgresql 12 是有很多新增特性的,但是最关键的一点是Postgresql 12 的SQL备份文件是不能直接使用psql命令导入到Postgresql 10 的. Ubuntu18.04 ...

  6. Flutter开发桌面应用的一些探索

    引言 在移动应用开发领域,Flutter已经赢得了广泛的认可和采用,成为了跨平台移动应用开发的瑞士军刀.然而,Flutter的魅力并不仅限于移动平台,它还可以用于开发桌面应用程序,为开发人员提供了一种 ...

  7. XJTU少年班+自动化钱学森班+电气工程辅修专业课笔记合集

    通过百度网盘分享的文件:笔记整理链接:https://pan.baidu.com/s/1BrHQ1EqvlQlbWqpD5h_6Sg?pwd=shsg 提取码:shsg复制这段内容打开「百度网盘APP ...

  8. 使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理

    背景 在上一篇文章中,我们已经了解到华为即将发布的鸿蒙操作系统纯血版本--鸿蒙 Next,以及各个互联网厂商开展鸿蒙应用开发的消息.其中,Taro作为一个重要的前端开发框架,也积极适配鸿蒙的新一代语言 ...

  9. KD-Tree 小记🐤

    KD-Tree,是用来维护一个空间(其实一般是平面)中的信息的数据结构. 以下就 2D-Tree 进行讨论.(盲猜并不会考 3D 及以上) 思想:将一个大矩形以一种方式划分成若干个小矩形,然后询问时只 ...

  10. 【解决了一个小问题】terraform apply 的时候出现访问 localhost 出错

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 有这样一段 terraform 的部署脚本: provid ...