有时候,我们需要用配置文件存储一些图像或者视频的信息。
先来一个简单的例子:
#include <cv.h> #include <highgui.h> int main(int argc,char **argv) { CvFileStorage *fs = cvOpenFileStorage("cfg.xml", 0, CV_STORAGE_WRITE); cvWriteInt(fs, "frame_count", 10); cvReleaseFileStorage(&fs); }
结果是生成一个cfg.xml,下面是它的内容:
<?xml version="1.0"?> <opencv_storage> <frame_count>10</frame_count> </opencv_storage>
这里不仅仅可以写一些简单数据,还可以写好几层的数据:
#include <cv.h> #include <highgui.h> int main(int argc,char **argv) { CvFileStorage *fs = cvOpenFileStorage("cfg.xml", 0, CV_STORAGE_WRITE); cvWriteInt(fs, "frame_count", 10); cvStartWriteStruct(fs, "frame_size", CV_NODE_MAP); cvStartWriteStruct(fs, "frame_detail", CV_NODE_MAP); cvWriteInt(fs, "K", 33); cvWriteInt(fs, "FF", 87); cvEndWriteStruct(fs); cvWriteInt(fs, "x", 320); cvWriteInt(fs, "Y", 240); cvEndWriteStruct(fs); cvReleaseFileStorage(&fs); }
效果是:
<?xml version="1.0"?> <opencv_storage> <frame_count>10</frame_count> <frame_size> <frame_detail> <K>33</K> <FF>87</FF></frame_detail> <x>320</x> <Y>240</Y></frame_size> </opencv_storage>
这里要注意了,这里使用了CV_NODE_MAP,这里就要加key了,不然会报错。如果使用了CV_NODE_SEQ的时候加key也会报错。
这里的key是指上面的"x","y"这些值。不加key的时候是0.
所以,SEQ适合顺序结构,MAP适合树状结构。
他还可以写矩阵,鉴于目前还没有学到,暂时略过。