在 C++ 中读取 .mat 文件而不使用外部库(matio 等)或 api

问题描述 投票:0回答:1

如何在不使用任何外部库(matio 等)或 API 的情况下读取 C++ 中的 .mat 文件?

我知道文件里面有什么:

  • img1 双 512×640 2621440 字节
  • img2 双精度 512x640 2621440 字节
  • 结构体1×1 2665452字节

我尝试使用 fstream 执行此操作,但输出不正确(我确信该文件不是问题,因为我已在 MATLAB 中检查了它。)

std::ifstream file("file.mat",    std::binary);

if (!file.is_open()){
    std::cerr << "error opening the file" << std::endl;
    return 1;
}

file.seekg(2665452);
cv::Mat img1(512,640, CV_64F);
file.read( reinterpret_cast<char*>        (img1.data),2621440);

file.close();

cv::Mat img1P;
img1.convertTo(img1P,CV_8U);
cv.imwrite("img1P.png",img1P);
c++ matlab mat-file
1个回答
0
投票

“文件内部”不仅仅是与这三个对象相对应的字节,而是 MAT 文件的标准结构和数据,以及序列化为 MAT 文件格式引发的形式的这些对象。如果您不想使用解析 MAT 文件的外部库,那么您将需要编写自己的 MAT 文件解析器。 MAT 文件格式的描述位于here。制作 MAT 文件解析器将是一个漫长且复杂的过程。

© www.soinside.com 2019 - 2024. All rights reserved.