QT 中如何保存matlab 能打开的.mat数据矩阵!

Windows 上安装并使用 MATIO 库来保存 MATLAB 格式的 .mat 文件,需要进行以下步骤:

1. 下载并安装 CMake

MATIO 使用 CMake 构建项目,因此你需要先安装 CMake。

  • 前往 CMake 官网下载适用于 Windows 的安装程序并安装。

2. 下载 MATIO 库源码

  • 访问 MATIO 的 GitHub 页面 或 MATIO 的 SourceForge 页面 下载库的源码。
  • 解压下载的源码到一个方便的位置。

3. 安装依赖项

MATIO 依赖于 zlibhdf5,你需要安装它们并将其配置在 Windows 上:

(a) 安装 zlib
  • 从 zlib 官网下载适用于 Windows 的 zlib,或者可以在 GitHub 上找到源码。
  • zlib 源码解压到某个文件夹,并用 CMake 生成 Windows 平台的项目文件,然后用 Visual Studio 编译。
  • 这里可参考Windows中zlib的安装与配置_zlib windows-CSDN博客
(b) 安装 hdf5
  • 从 HDF5 官网下载适用于 Windows 的 HDF5 库。
  • 按照 HDF5 提供的安装说明进行操作,确保在编译时提供正确的路径。

4. 配置并编译 MATIO

一旦你拥有了 zlibhdf5,就可以通过以下步骤来配置并编译 MATIO

  1. 打开 CMake 并设置 MATIO 的源码路径和生成二进制文件的输出路径。
  2. 点击“Configure”按钮,选择你的生成工具(通常是 Visual Studio)。
  3. 在配置过程中,CMake 会要求你指定 zlibhdf5 的路径。设置好这两个库的路径后,点击“Generate”。
  4. 打开生成的 Visual Studio 解决方案,编译 MATIO。

5. 将 MATIO 集成到你的项目

编译成功后,MATIO 库会生成 .lib.dll 文件。你可以将这些库文件和头文件集成到你的项目中:

  1. 在项目的编译设置中,添加 MATIO 的包含路径以及 zlibhdf5 的路径。
  2. MATIO.lib 文件添加到链接器设置中。
  3. 确保在运行程序时,MATIO.dll 文件位于可执行文件所在目录或系统的路径中。
INCLUDEPATH +=$$PWD/include/matio
INCLUDEPATH +=$$PWD/include
LIBS += $$PWD/lib/libmatio.lib

 其中用到的dill

 lib

其中用到的

void PhaseUnwrapper::saveMatrixToMat(const cv::Mat& mat, const std::string& filename) {

    mat_t *matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT5);  // 使用 MATLAB 5.x 格式

    if (matfp == NULL) {
        throw std::runtime_error("无法创建MAT文件: " + filename);
    }

    // 转换为double类型
        cv::Mat mat_double;
        if (mat.depth() != CV_64F) {
            mat.convertTo(mat_double, CV_64F);  // 转换为双精度浮点型
        } else {
            mat_double = mat;
        }

        // 获取行和列
        int rows = mat_double.rows;
        int cols = mat_double.cols;
        size_t total_elements = static_cast<size_t>(rows) * static_cast<size_t>(cols);

        // 线性化存储数据
        std::vector<double> mat_data(total_elements);
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                mat_data[i + j * rows] = mat_double.at<double>(i, j);  // 以列主序存储数据
            }
        }

        // 定义维度
        size_t dims[2] = { static_cast<size_t>(rows), static_cast<size_t>(cols) };

        // 创建MAT变量
        matvar_t *matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, mat_data.data(), 0);
        if (matvar == NULL) {
            Mat_Close(matfp);
            throw std::runtime_error("无法创建MAT变量");
        }

        Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_NONE);
        Mat_VarFree(matvar);
        Mat_Close(matfp);

        std::cout << "矩阵已成功保存到 " << filename << std::endl;
}

int main() {
    // 示例:创建一个 5x5 的矩阵
    cv::Mat mat = (cv::Mat_<double>(5, 5) << 1, 2, 3, 4, 5,
                                              6, 7, 8, 9, 10,
                                              11, 12, 13, 14, 15,
                                              16, 17, 18, 19, 20,
                                              21, 22, 23, 24, 25);

    // 保存到MAT文件
    saveMatrixToMat(mat, "matrix.mat");

    return 0;
}

 最后保存下来的mat

这里需要 完整的库的可以下方留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891619.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

说下SSL/TLS四次握手过程?

参考自&#xff1a;SSL/TLS四次握手过程是怎么样的&#xff1f;HTTPS、SSL、TLS三者之间的联系和区别 一.SSL/TLS 简介 SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层&#xff0c;用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。 SSL 是 HT…

AD报错failed to add class member\net

什么原因导致的我到现在还没弄懂&#xff0c;总之解决方法是在PCB端删除所有现有的并且可删除的nets与components。下次问题复现了再补充截图&#xff08;不想再遇到了球球了这种玄学问题&#xff09;。 网络截图&#xff1a; 解决步骤&#xff1a;设计->类 把可删除的网络…

西门子828d的plc一些信息记录

1、虽然是200的plc但是引入了DB的形式替代原来的V存储区。 2、用户自定义DB块范围&#xff0c;DB9000-DB9063,共64个DB块。 可用地址范围如上图 机床MCP483面板地址表&#xff0c;其它类型的面板地址自己在828d简明调试手册里查看。 如何上载828d的plc程序&#xff1a; 1.通…

coze bot开发的最小实践

一、coze专业版开通 网站地址&#xff1a;扣子专业版-火山引擎 开通流程&#xff1a; 1."立即使用" 扣子专业版 1.点击【立即使用】2.登录账号(上一步已登录可跳过) 2.进行实名认证后&#xff0c;开启【扣子专业版】&#xff08;已认证可跳过&#xff09; 1. 前…

Mysql行转列的写法

一、何为行转列&#xff1f; 在搞清楚这一概率之前&#xff0c;不妨来认识一下我们mysql表二维表结构数据&#xff0c;例如学生成绩表格&#xff0c;属性有学生姓名&#xff0c;学生科目&#xff0c;成绩&#xff0c;表结构如下&#xff1a; CREATE TABLE test_9 (id int(11) …

Android map 获取值

Android Map 获取值的完整指南 在Android开发中&#xff0c;使用Map&#xff08;映射&#xff09;来存储和检索数据是非常常见的需求。Map是一种键值对集合&#xff0c;能够快速而高效地根据特定的键获取值。在这篇文章中&#xff0c;我们将深入探讨如何在Android应用中使用Ma…

Linux的zookeeper安装部署

1.zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和HBASE的重要组件 2.下载zookeeper安装包zookeeper安装包https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/ 移动到Linux解压 解压到/export/server文件夹 命令: tar -xvf apache-zooke…

AI大模型:生产中的RAG,为何表现不尽如人意?

RAG&#xff08;Retrieval Augmented Generation,检索增强生成&#xff09;是一个将大规模语言模型(LLM)与来自外部知识源的检索相结合的框架,以改进问答能力的工程框架。虽然一切都看起来很美好&#xff0c;在实际应用中&#xff0c;RAG的状态确是“一看就会&#xff0c;一用就…

【Linux】嵌入式Linux系统的组成、u-boot编译

Linux—嵌入式Linux系统的组成、u-boot编译 前言一、嵌入式Linux系统的组成1.1 嵌入式Linux系统和PC完整的操作系统的对比如下&#xff1a;1.2 PC机—Windows系统启动流程&#xff08;PC机—Linux系统、嵌入式ARM—linux系统的启动流程类似&#xff09; 二、编译u-boot2.1 u-bo…

内核定时器API实现点灯

1.内核定时器 定时器是一个很常用的功能&#xff0c;需要周期性处理的工作都要用到定时器。 Linux 内核定时器 采用系统时钟来实现&#xff0c;并不是6ull里面的硬件定时器。 Linux 内核定时器使用很简单&#xff0c;只需要提供超时时间(相当于定时值)和定时处理函数即…

7万字Java后端面试题大全(附答案)——持续更新

目录 Java基础JDK/JRE/JVM三者的关系JDK常用的包 和 equals 的区别是什么&#xff1f;Java 中的几种基本数据类型了解么&#xff1f;什么是自动拆装箱&#xff1f;final 关键字中有什么作用&#xff1f;接口和抽象类有什么区别&#xff1f;String, StringBuffer 和 StringBuild…

构建流媒体管道:利用 Docker 部署 Nginx-RTMP 从 FFmpeg RTMP 推流到 HLS 播放的完整流程

最近要实现一个类似导播台的功能&#xff0c;于是我先用 FFmpeg 实现一个参考对照的 Demo&#xff0c;我将其整理为一篇文章&#xff0c;方便后续大家或者和自己参考&#xff01; 1、软件工具介绍 本次部署相关软件 / 工具如下&#xff1a; FFmpeg&#xff1a;全称是 Fast Fo…

与ZoomEye功能类似的搜索引擎还有哪些?(渗透课作业)

与ZoomEye功能类似的搜索引擎有&#xff1a; Shodan&#xff1a;被誉为“物联网的搜索引擎”&#xff0c;专注于扫描和索引连接到互联网的各种设备&#xff0c;如智能家居设备、工业控制系统、摄像头、数据库等。它提供全球互联网设备的可视化视图&#xff0c;帮助用户了解网络…

第21~22周Java主流框架入门-Spring 1SpringIoc容器与Bean管理

1.Spring IOC 与依赖注入课程笔记 课程简介 本节课介绍了 Spring 框架中的核心概念——IOC&#xff08;控制反转&#xff09;和 DI&#xff08;依赖注入&#xff09;。Spring 是 Java 生态中最重要的框架之一&#xff0c;几乎所有的 Java 项目开发都会使用它。理解 Spring 的…

RWKV-CHN模型部署教程

一、模型介绍 RWKV 语言模型&#xff08;用纯 100%RNN 达到 GPT 能力&#xff0c;甚至更强&#xff09;&#xff0c;该项目旨在通过为您自动化所有事情来消除使用大型语言模型的障碍。您需要的是一个只有几兆字节的轻量级可执行程序。此外&#xff0c;该项目还提供了一个接口兼…

python yolov8半自动标注

首先标注一部分图片&#xff0c;进行训练&#xff0c;生成模型&#xff0c;标注文件为xml方便后面统一做处理。 1、标注数据&#xff08;文件为xml, 转为txt用于训练&#xff0c;保留xml标签文件&#xff09; 2、模型训练&#xff08;训练配置、训练代码、&#xff09; 3、使用…

一个将.Geojson文件转成shapefile和kml文件的在线页面工具

最近需要读取.geojson格式的流域边界文件。在谷歌地球桌面版和globalMapper中均无法正常读取。下面我发现的一个在线的平台可以很好实现这一功能。 GeoJSON to SHP Converter Online - MyGeodata Cloud ❤️欢迎点赞收藏❤️

关于WPF(Windows Presentation Foundation)中Grid控件

本文将从Grid控件的基础概念开始&#xff0c;逐步深入探讨其特性、用法、实例代码&#xff0c;以及最佳实践。 1. WPF和布局简介 WPF是一种用于构建Windows桌面应用程序的UI框架&#xff0c;它通过XAML&#xff08;Extensible Application Markup Language&#xff09;使开…

Oracle中解决select into值集为空的报错情况

先看为空的情况 procedure test is n number; begin select 1 into n from CUX_2_OM_RELEASE_LIMIT_V cov where cov.Customer_Idnull; end; CUX_2_OM_RELEASE_LIMIT_V中没有id是空的&#xff0c;因此返回的结果一定是空集 运行结果: 有时候我…

QT事件与网络通信

闹钟 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTimer> #include <QTextToSpeech> // 添加此行以引入QTextToSpeech类QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWin…