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
(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

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

相关推荐
passionSnail1 小时前
《用MATLAB玩转游戏开发》推箱子游戏的MATLAB趣味实现
开发语言·游戏·matlab
忆源2 小时前
【Qt】之音视频编程2:QtAV的使用篇
开发语言·qt·音视频
enyp803 小时前
Qt原型模式实现与应用
开发语言·qt·原型模式
忆源8 小时前
【Qt】之音视频编程1:QtAV的背景和安装篇
开发语言·qt·音视频
IT猿手10 小时前
基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
神经网络·算法·matlab·人机交互·无人机·强化学习·无人机三维路径规划
码到成龚12 小时前
问题及解决01-面板无法随着窗口的放大而放大
matlab·appdesigner
XuX0312 小时前
手搓传染病模型(SEIARW)
数学建模·matlab·微分方程·传染病
沅_Yuan13 小时前
基于小波神经网络(WNN)的回归预测模型【MATLAB】
深度学习·神经网络·matlab·回归·小波神经网络·wnn
引量AI13 小时前
TikTok矩阵运营干货:从0到1打造爆款矩阵
人工智能·矩阵·自动化·tiktok矩阵·海外社媒
teacher伟大光荣且正确13 小时前
Qt Creator 配置 Android 编译环境
android·开发语言·qt