我已经获得.mat
个文件(三维,单精度浮点),我想用VXL
阅读。 VNL
有一些类/功能可以执行此操作,但我没有找到任何证明其用途的示例。我从the header file拼凑了以下内容,但似乎没有数据被读入,当我要求维度时,我得到的似乎是未初始化的垃圾(尽管读取了标题中的一些数据) )。
#include <vcl_cstdlib.h>
#include <vcl_iostream.h>
#include <vcl_fstream.h>
#include <vnl/vnl_matlab_read.h>
#include <vnl/vnl_vector.h>
int main(int argc, char ** argv)
{
if (2 != argc)
{
std::cerr << "Provide a file." << std::endl;
return EXIT_FAILURE;
}
const char * fileName = argv[1];
vcl_filebuf fileBuffer;
if (!fileBuffer.open(fileName,vcl_ios::in))
{
std::cerr << "There was a problem opening the file." << std::endl;
return EXIT_FAILURE;
}
vcl_istream stream(&fileBuffer);
vnl_matlab_readhdr read(stream);
vcl_cout << read.name() << vcl_endl; // Platform: PCWIN64, Created on: (date and time)
vcl_cout << read.rows() << vcl_endl; // 1094852661
vcl_cout << read.cols() << vcl_endl; // 774905933
vnl_vector<float> data;
vnl_matlab_read_or_die(stream, data, fileName);
std::cout << data.size() << std::endl; // 0
return EXIT_SUCCESS;
}
我无法判断我是否错误地使用了该类,或者VNL
是否可以处理多维数组?
答案 0 :(得分:1)
并非所有MAT文件都使用相同的格式,它已被多次更改。阅读垃圾可能是尝试使用不支持压缩的库来读取压缩的MAT-File。
由于我无法找到您选择的库的任何合理文档,我只能推荐替代方案。在matlab中保存MAT-File时,请指定最新的格式-v7.3
。这样做,Matlab将编写一个gzip压缩HDF5文件,该文件附带an API for C++
如果您无法访问Matlab,请使用Octave将您的Mat-Files转换为最新格式。此处save
函数的选项称为-hdf5
,而不是-7.3