我试图将一系列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)分析视频,对于每一帧我获得&#34; dataAt_nFrame&#34;这是一个垫子。我想将这些数据的整个序列存储在一个数组SEQ中(如果你可以建议另一种类型Mat []我更喜欢)然后能够读取它们并为每个帧编号挑选每个Mat。
答案 0 :(得分:0)
我建议你使用字节数组。 Here是如何将cv :: Mat转换为字节数组的一个很好的例子。
答案 1 :(得分:0)
您应该在link处尝试使用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();