Мне дали .mat
файл (три измерения, с плавающей запятой одинарной точности), который я хотел бы прочитать, используя VXL
. VNL
имеет несколько классов / функций для этого, но я не нашел примеров, демонстрирующих их использование. Я собрал следующее из заголовочный файл, но кажется, что данные не считываются, и когда я спрашиваю об измерениях, я получаю то, что кажется неинициализированным мусором (хотя некоторые данные из заголовка читаются).
#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
не может иметь дело с многомерными массивами?
Не все MAT-файлы используют один и тот же формат, он менялся несколько раз. Чтение мусора может быть попыткой прочитать сжатый MAT-файл с библиотекой, которая не поддерживает сжатие.
Поскольку я не могу найти разумную документацию для выбранной вами библиотеки, я могу только порекомендовать альтернативу. При сохранении MAT-файла в matlab укажите формат -v7.3
который является самым последним. При этом Matlab напишет сжатый gzip HDF5 файл, который поставляется с API для C ++
Если у вас нет доступа к Matlab, используйте Octave, чтобы конвертировать ваши Mat-Files в самый последний формат. Здесь вариант для save
функция называется -hdf5
и не -7.3
Других решений пока нет …