从 MAT 文件中读取 C 应用程序中的自定义类

Posted

技术标签:

【中文标题】从 MAT 文件中读取 C 应用程序中的自定义类【英文标题】:Read custom class in C application from MAT-file 【发布时间】:2019-01-30 23:58:13 【问题描述】:

我想在 C++ 独立应用程序的 MAT 文件中访问自定义 MATLAB 类的属性。自定义类是在 MATLAB 中创建的类,如下所示:

classdef customClass
    properties
        myProp
    end

    methods
        function obj = customClass(arg1,arg2)
           obj.myProp = arg1 + arg2
        end
    end
end

这个类的一个实例现在保存到一个 MAT 文件中,并且应该由一个独立的 C 应用程序访问。

显然,MATLAB 提供了一个library 用于在 C 应用程序中读取 MAT 文件。 这适用于“普通”类型,并且 API 似乎提供了函数 mxGetProperty 来访问自定义对象。但是,如果我尝试使用此函数运行一个最小示例,它会在management.cpp:671 中出现空断言而失败。最小的例子是:

#include <iostream>
#include "mat.h"

int main()

    MATFile* file = matOpen("test.mat", "r");
    if (file == nullptr)
        std::cout << "unable to open .mat" << std::endl;

    mxArray* customClass = matGetVariable(file, "c");
    if (customClass == nullptr)
        std::cout << "unable to open tcm" << std::endl;

    mxArray* prop = mxGetProperty(customClass, 0, "myProp");

    if (prop == nullptr)
        std::cout << "unable to access myProp";

仔细查看文档会发现限制: mxGetProperty 不支持独立应用程序,例如使用 MATLAB 引擎 API 构建的应用程序。

是否有任何其他可能从独立的 C++ 应用程序访问 MAT 文件中的 customClass

【问题讨论】:

【参考方案1】:

classdef 变量在 MATLAB 中是不透明的对象,属性如何存储在其中的详细信息并未公布。您必须使用官方 API 函数来获取它们(顺便说一句,mxGetProperty 制作了一个深拷贝)。所以你被卡住了。我的建议是从对象中提取您感兴趣的属性,然后将它们保存到 mat 文件中。

【讨论】:

以上是关于从 MAT 文件中读取 C 应用程序中的自定义类的主要内容,如果未能解决你的问题,请参考以下文章

matlab中mat文件怎么转化为图形文件

Matlab使用键值数据读取和分析 MAT 文件

python读取mat(v7.3)文件中的cell以及struct

matlab如何批量读取mat文件中的矩阵?

从 grails 应用程序中的自定义 groovy 文件加载 spring bean

matlab读取.mat文件中的指定数据