【VS开发】【计算机视觉】OpenCV读写xml文件《C版本》

一些简单的XML读写操作,记之于笔记以备忘


主要功能:

1. 创建XML

2. 向XML中存储或者是读取Int float型基本数据

3. 通过创建XML元素,存取复杂的结构如:结构体、矩阵

代码如下

// BasicExample.cpp : Defines the entry point for the console application.  
//  
  
#include "stdafx.h"  
#include <iostream>  
#include "opencv2/opencv.hpp"  
  
using namespace std;  
  
int _tmain(int argc,_TCHAR* argv[])  
{  
    //创建XML文件存储  
    CvFileStorage* fs = cvOpenFileStorage("jarvischu.xml",//用于存储的内存,如果为NULL,则会使用一个临时内存  
                           CV_STORAGE_WRITE,"GB2312"//编码  
                          );  
    //写入数据  
      
    cvWriteInt(fs,"frame_count",10);  //--写Int  
    cvWriteReal(fs,"pi",3.14);             //--写Float  
  
    //--写结构体  
    cvStartWriteStruct(fs,"frame_size",CV_NODE_MAP,"id_size" );// 有名称(会新建一个标签)  
    cvWriteInt(fs,"width",320);  
    cvWriteInt(fs,"height",200);  
    cvEndWriteStruct(fs);  
  
    cvStartWriteStruct(fs,"author_info",CV_NODE_SEQ,"id_author");// 无名称  
    cvWriteString(fs,"JarvisChu");  
    cvWriteString(fs,"China");  
    cvEndWriteStruct(fs);  
  
    //--写矩阵  
    unsigned char vec[]={1,2,3,4,5,6,7,8,9};  
    CvMat mat = cvMat(3,CV_8UC1,vec);  
    cvWrite(fs,"Matrix",&mat);  
  
    //--写注释  
    cvWriteComment(fs,"This is a example for operatoring the xml file",0);//不为0表示放在当前行,0表示新行  
  
    //释放  
    cvReleaseFileStorage(&fs);  
  
    //打开XML文件  
    fs = cvOpenFileStorage("jarvischu.xml",则会使用一个临时内存  
                CV_STORAGE_READ,"GB2312"//编码  
                   );  
  
    //读取数据  
    int f = cvReadIntByName(fs,0);//读取有名字的Int  
  
    //--读取元素数据  
    CvFileNode* fn = cvGetFileNodeByName(fs,"frame_size"); //先读取父元素(标签,节点)  
    int width = cvReadIntByName(fs,fn,"width"); //通过父元素读取子元素  
    int height = cvReadIntByName(fs,"height");  
  
    //--读取元素内的顺序数据  
    fn = cvGetFileNodeByName(fs,"author_info");//先读取元素  
    CvSeq* seq = fn->data.seq;            //获取元素的顺序流  
    const char* name = cvReadString((CvFileNode*)cvGetSeqElem(seq,0));//读取顺序流中数据 0  
    const char* country = cvReadString((CvFileNode*)cvGetSeqElem(seq,1));//读取顺序流中数据 1  
  
    cout<<"frame_count:"<<f<<endl<<"width:"<<width<<endl<<"height"<<height<<endl\  
        <<"name:"<<name<<endl<<"country:"<<country<<endl;  
  
    return 0;  
}  


运行结果如下

jarvischu.xml文件如下

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇