Basic data persistence and storage
在本文中,我们将探索OpenCV中存储和读取我们的数据的函数。在许多应用中,比如校准(calibration)或者机器学习,我们需要处理数据计算,就需要保存结果以备下一个执行阶段重新获取。为此,OpenCV提供了一个XML/YAML保持层(persistence layer)。
1. 写入文件存储(Write to a file storage)
要将OpenCV数据或者其它数值数据写入到一个文件中,我们可以使用FileStorage类,位于core模块中,可以使用类似STL中的流操作方式操作FileStorage对象。
1 // FileStorage usage 2 #include <opencv2/core.hpp> 3 using namespace cv; 4 5 #include <iostream> 6 using namespace std; 7 8 int main(int, char** argv) 9 { 10 // create our writter 11 FileStorage fs("test.yml", FileStorage::WRITE); 12 // Save an integer 13 int fps = 5; 14 fs << "fps" << fps; 15 // Create some Mat sample 16 Mat m1 = Mat::eye(2, 3, CV_32F); 17 Mat m2 = Mat::ones(3, 2, CV_32F); 18 Mat result = (m1 + 1).mul(m1 + 3); 19 // write the result 20 fs << "Result" << result; 21 // release the file 22 fs.release(); 23 24 FileStorage fsread("test.yml", FileStorage::READ); 25 Mat r; 26 fsread["Result"] >> r; 27 cout << r << endl; 28 fsread.release(); 29 30 return 0; 31 }
执行以上程序代码将会生成一个test.yml文件,文件内容如下所示:
%YAML:1.0 fps: 5 Result: !!opencv-matrix rows: 2 cols: 3 dt: f data: [ 8., 3., 3., 3., 8., 3. ]