c++ - 在 C++ 中使用 matio 时 Mat_Open 不工作

标签 c++ matlab matio

我正在使用 matio 库编写 std::vector<std::vector<std::vector<double>>> 的内容和一些其他数据到 MatLab 文件。我在这里使用了教程:http://na-wiki.csc.kth.se/mediawiki/index.php/MatIO

然而,Mat_Open留下来NULL ,这意味着我无法向文件写入任何内容。没有错误消息,链接/编译正常,Saving mat file永远不会打印,程序的退出代码是 0 .我是否遗漏了一些明显的东西?

应该创建 MatLab 文件的函数的内容:

mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;

mat = Mat_Open("/home/ruben/data.mat", MAT_ACC_RDWR);

if(mat != NULL) {
    std::cout << "Saving mat file" << std::endl;
    matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, matrix, 0);
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
    Mat_VarFree(matvar);

    matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
    Mat_VarFree(matvar);

    Mat_Close(mat);
}

我使用 #include <matio.h> 包含库, 并将其链接到 -std=c++11 -L/usr/lib -lmatio -lz .感谢您的帮助。

编辑:我在 GitHub 上找到了该项目,将其作为问题提交:https://github.com/tbeu/matio/issues/45

最佳答案

在项目作者的帮助下,我自己找到了解决方案。 有两件事出了问题:

  1. 如果 MatLab 文件尚不存在,应使用 Mat_CreateMat_CreateVer
  2. std::vector 元素不能简单地用作 Mat_VarCreate 函数的参数。应该传递指向第一个元素的指针。

更新的工作代码:

mat_t *mat;
matvar_t *matvar;
unsigned long dims[3] = {100, 100, 3};
unsigned long single_dim[1] = {1};
unsigned long size = 100;
double number = 3.14;

mat = Mat_Create("/home/ruben/data.mat", NULL);

if(mat != NULL) {
    std::cout << "Saving mat file" << std::endl;
    matvar = Mat_VarCreate("matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 3, dims, &matrix->at(0), 0);
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
    Mat_VarFree(matvar);

    matvar = Mat_VarCreate("number", MAT_C_DOUBLE, MAT_T_DOUBLE, 1, single_dim, &number, 0);
    Mat_VarWrite(mat, matvar, MAT_COMPRESSION_ZLIB);
    Mat_VarFree(matvar);

    Mat_Close(mat);
}

希望这对某人有用。

关于c++ - 在 C++ 中使用 matio 时 Mat_Open 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105475/

相关文章:

c++ - 为什么我肯定会输入 "procedure entry point could not be located in dll"却不能?

c++ - 如何修复 C++ 中的回溯行号错误

c++ - 在 Parent Ctor 中绑定(bind)虚函数

matlab - 更改 Matlab 绘图中数据光标的字体

c++ - 读取 Matlab .mat 文件 : variable's rank and dims correct, 但数据为 NULL

c++ - 使用 Matio 在 C++ 中打开 3d matlab 文件

c++ - OpenCV - 在 cvtColor 之后使用 ROI

matlab - 检索添加到 MATLAB OOP 中的类的动态属性列表

matlab - 使用matlab选择矩阵中的元素