以下是调用OpenCV FileStorage存储配置文件的示例,存储格式为yaml。
- OpenCv自带的数据格式不必多说,存储和读取都比较方便。
- 这里主要提一下std::vector的存取用"[]"来表示, std::map的存取用"{}"来表示
具体的用法可以参考以下示例:
void WriteConfigFile(string fpath)
{
cv::FileStorage fs(fpath, cv::FileStorage::WRITE);
fs << "frameCount" << 5;
cv::Mat intriMat = (Mat_<double>(3, 3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1);
cv::Mat distCoff = (Mat_<double>(5, 1) << 0.1, 0.01, -0.001, 0, 0);
fs << "intriMat" << intriMat;
fs << "distCoff" << distCoff;
// '[]' means list
// '{}' means map
// ':' means to place the members in a single line
//fs << "features" << "[:";
fs << "features" << "[";
for (int i = 0; i < 20; i++) {
cv::Point2f prePt(rand() % 256, rand() % 256);
cv::Point2f curPt(rand() % 256, rand() % 256);
fs << "{:";
fs << "prePt" << prePt << "curPt" << curPt;
fs << "}";
}
fs << "]";
fs.release();
}
void ReadConfigFile(string fpath)
{
cv::FileStorage fs(fpath, cv::FileStorage::READ);
int frameCnt;
fs["frameCount"] >> frameCnt;
cout << "frameCount: " << frameCnt << endl;
cv::Mat intriMat;
fs["intriMat"] >> intriMat;
cout << "intriMat" << intriMat << endl;
cv::FileNode featureNode = fs["features"];
cv::FileNodeIterator it;
for (it = featureNode.begin(); it != featureNode.end(); it++) {
CV_POINT2 prePt, curPt;
(*it)["prePt"] >> prePt;
(*it)["curPt"] >> curPt;
cout << "prePt:" << prePt << ", curPt" << curPt << endl;
}
fs.release();
}
WriteConfigFile("test.yaml");
ReadConfigFile("test.yaml");