Мне нужно приобрести и сохранить большое количество изображений с помощью камеры в течение нескольких часов. Я использую BitFlow SDK для обработки захвата камеры и OpenCV в основном для отображения и обработки изображений. Мне нужно найти способ сохранить все эти данные в компактной, легкодоступной форме (создание многостраничных файлов tiff было первой целью, но на этом практически нет поддержки).Невозможно поместить более одного объекта Mat в файл YAML с помощью OpenCV
В любом случае, теперь я пытаюсь сохранить несколько изображений в одном файле YAML, используя класс FileStorage OpenCV без особого успеха. Я могу успешно написать и прочитать один изображение из YAML файла, который я создал, но как только я пытаюсь поставить более одного объекта Mat в файле с помощью оператора < <, я получаю следующее сообщение об ошибке:
First-chance exception at 0x74E2C42D in BFBi_test.exe: Microsoft C++ exception: cv::Exception at memory location 0x0045F6B4. First-chance exception at 0x74E2C42D in BFBi_test.exe: Microsoft C++ exception: cv::Exception at memory location 0x0045F6B4. Unhandled exception at at 0x74E2C42D in BFBi_test.exe: Microsoft C++ exception: cv::Exception at memory location 0x0045F6B4.
Часть моего кода:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "resource.h"
#include "SequenceInterface.h"
#include "opencv2/core/core.hpp"
#include "persistence.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// Control variables
BFU32 numBuffers = 10; // Allocate 10 buffers
BFU32 setupOptions = 0; // Use default setup options.
FileStorage firstImg("FirstImage.yml", FileStorage::WRITE);
FileStorage secondImg("SecondImage.yml", FileStorage::WRITE);
cout << "Creating instance of sequence interface." << endl;
SequenceInterface board(0, numBuffers, 0);
PBFU32* pBufferArray= board.getBufferArrayPointers();
Mat test(Size(1024, 1024),CV_8UC1, (void *)pBufferArray[0], (size_t)1024);
Mat test2(Size(1024, 1024),CV_8UC1, (void *)pBufferArray[1], (size_t)1024);
// -- Acquisition done here ---
...
...
// -- End of acquisition --
firstImg<<"firsttest"<< test;
firstImg<< "secondtest" << test2; // Runtime error on this line;
firstImg.release();
}
Если я пишу test2 к secondImg, никаких проблем не возникает. Я также попытался добавить случайные строковые объекты в firstImg, и там тоже нет проблем. Переключение на XML также ничего не изменило. Есть ли максимальный размер для файлов YAML, что означает, что мои изображения слишком велики для этого использования?