Opencv: как написать последовательность Mat в XML, используя FileStorage

Я пытаюсь сохранить последовательность элементов Mat в файле XML. Это набросок моего кода

Mat SEQ[3];
int nFrame = 0;
while (1) {
...
...
SEQ[nFrame] = dataAt_nFrame;
if (nFrame == 2) break;
}

FileStorage fs("test.xml", FileStorage::WRITE);
fs << "dataSequence" << SEQ;
fs.release();

cvReleaseCapture(&video1);

FileStorage fs2("test.xml", FileStorage::READ);
Mat SEQ2[3];
fs2["sequence"] >> SEQ2;

//.... here i want print out the values in order to check if are the same i've written...
fs2.release();

В то время как while (1) анализирует видео, для каждого кадра я получаю «dataAt_nFrame», который является Mat. Я хочу сохранить всю последовательность этих данных в массиве SEQ (если вы могли бы предложить альтернативу типа Mat [], который я предпочту), а затем иметь возможность читать их и выбирать каждый Mat для каждого номера кадра.

0

Решение

Я предлагаю вам использовать байтовые массивы. Вот хороший пример того, как преобразовать cv :: Mat в байтовый массив

0

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

Тебе стоит попробовать sequences/unnamed collection как в примере в ссылка на сайт. Ниже код не использует его, хотя.

#include <string>

std::string toString( int count ) {
return "frame"+std::to_string(count);
}

int nFrame = 0;
FileStorage fs("test.xml", FileStorage::WRITE);
while (1) {
//...
//...
fs << toString(nFrame) << dataAt_nFrame;
}

//saving number of frames in file
fs << "frameCount" << nFrame;
fs.release();

//....

int count=0;
FileStorage fs2("test.xml", FileStorage::READ);

//reading number of frames from file
fs2["frameCount"] >> count;
std::vector<Mat> SEQ2(count);

while( --count >= 0 ) {
//reading individual Mat
fs2[ toString(count) ] >> SEQ2[count];
}

//...
fs2.release();
0

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