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

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

相关推荐
小白熊_XBX21 分钟前
机器学习可视化教程——混淆矩阵与回归图
人工智能·python·机器学习·矩阵·回归·sklearn
Bartender_Jill1 小时前
[ROS2]解决PyQt5和sip的各种报错问题 stderr: qt_gui_cpp
开发语言·python·qt·机器人·数据可视化
听雨云烟2 小时前
Qt实现Halcon窗口显示当前图片坐标
开发语言·qt
zhugedz5 小时前
labview和QT编程
开发语言·qt·labview
软件算法开发5 小时前
云计算SLA响应时间的matlab模拟与仿真
matlab·云计算·sla·响应时间
牵牛老人6 小时前
Qt开发技巧(十三)QList插入操作,扩展类型的使用,关于QSS的坑,Qt的延时方法,Qt编译的三种版本,环境搭建多练练,指向Qt源码的报错
开发语言·qt
天才小小傲7 小时前
【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色
开发语言·matlab·科研绘图
Winner13007 小时前
matlab 求绝对值
开发语言·算法·matlab
明志刘明7 小时前
昇思MindSpore进阶教程--黑塞矩阵
人工智能·深度学习·矩阵·mindspore·昇思