Чтение файла MatLab (mat) с помощью VNL

Мне дали .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 не может иметь дело с многомерными массивами?

2

Решение

Не все MAT-файлы используют один и тот же формат, он менялся несколько раз. Чтение мусора может быть попыткой прочитать сжатый MAT-файл с библиотекой, которая не поддерживает сжатие.

Поскольку я не могу найти разумную документацию для выбранной вами библиотеки, я могу только порекомендовать альтернативу. При сохранении MAT-файла в matlab укажите формат -v7.3 который является самым последним. При этом Matlab напишет сжатый gzip HDF5 файл, который поставляется с API для C ++

Если у вас нет доступа к Matlab, используйте Octave, чтобы конвертировать ваши Mat-Files в самый последний формат. Здесь вариант для save функция называется -hdf5 и не -7.3

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]