OpenCV:xml文件的读取与写入

 时间:2024-10-15 01:38:01

1、xml文件结构:①xml文件的第一行为xml文件说明,一般说明了xml的版本和编码信息;如:<? xmlversion="1.0" encoding="UTF-8"?>②xml文件的第二行为xml的起始节点,也是根节点;Opencv的xml文件默认的根节点为:<opencv_storage>……</opencv_storage>③每个xml文件有且只有一个根节点,其他节点都包含在这个根节点之内,每个节点又可以包含若干个子节点。

OpenCV:xml文件的读取与写入

2、xml文件的读和写:①xml文件的写数据,首先用可写的方式打开一个test.xml文件,然后写入一个Mat矩阵,最后关闭。②xml文件的读数据,首先用可读方式打开一个test.xml文件,然后读出“src1”节点里面的中间,最后关闭。③读和写打开xml文件也可以和下面那样:FileStorage fswrite;fswrite.open("stereo.xml",FileStorage::WRITE);FileStorage fsread;fsread.open("stereo.xml",FileStorage::READ);【注】:FileStorage::WRITE每次都会新建一个文件,如果文件已经存在就会被覆盖掉,如果不想被覆盖,而是继续在已有的文件基础上添加内容,那么可以以FileStorage::APPEND的方式来打开!

OpenCV:xml文件的读取与写入
OpenCV:xml文件的读取与写入

3、xml文件中-vector数据结构:vector数据,xml文件节点,不包含子节点;在输入vector数据的开始和结尾要分别输入“[”,“]”;【注】:在输入vector数据前要先输入标签名称;

OpenCV:xml文件的读取与写入

4、xml文件中-map数据结构map数据,xml文件瘠彐伊竽节点,包含子节点;在输入map数据的开始和结尾要分别佯鲅烫侬写入“{”,“}”,【注】:在输入 map数据前要先输入标签名称;示例:手动创建一个xml父节点(map),包含三个子节点(vector)。#include <opencv2\opencv.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\features2d\features2d.hpp>#include <opencv2\core\core.hpp>using namespace std;using namespace cv;int main(){ //========建立节点(写数据)========= FileStorage fswrite; fswrite.open("calib.xml",FileStorage::WRITE); fswrite<<"src"<<"{"<<"src1"<<"["<<1<<2<<3<<"]"//子节点 <<"src2"<<"["<<1<<2<<3<<"]" <<"src3"<<"["<<1<<2<<3<<"]"<<"}"; fswrite.release(); cout<<"Write Finished"<<endl; getchar(); return 0;}

OpenCV:xml文件的读取与写入

5、遍历xml文件节点:在包含多个节点的xml文件中,遍历的时候,首先先获取了文件的根节点-FileNode;然后定义一个迭代儡泌掩羞器-FileNodeIterator,从根节点的第一个节点开始遍历,直到最后一个节点结束。结果分析:下面是stereo.xml的内容,其中<?xml version="1.0"?>为文件信息,说明了xml的版本为1.0;<opencv_storage>...</opencv_storage>为根节点,<src1 type_id="opencv-matrix">...</src1>为第一级节点(根节点的子节点),<rows>3</rows>为第二级节点,它是<src1 type_id="opencv-matrix">...</src1>的子节点。

OpenCV:xml文件的读取与写入
OpenCV:xml文件的读取与写入

6、xml中自定义结构存储:OpenCV的xml可以实现int,float,double,string,mat等数据类型的存储和读取;但是往往我们会自定义类型的数据,那么如何实现自定义数据的存取?步骤如下:①自定义数据结构:②定义完数据结构后需要重载两个函数;③对自定义的数据进行存储和读取;class faceInfo{public: void write(FileStorage& fs) const { fs<<"{"<<"matrix"<<matrix<<"label"<<label<<"}"; } void read(const FileNode& node) { node["matrix"]>>matrix; node["label"]>>label; }public: Mat matrix; string label;};

7、void write(FileStorage& fs, const string&, const faceInfo& x){ x.write(fs); }void read(const FileNode& node, faceInfo& x, const faceInfo& default_value = faceInfo()){ if(node.empty()) x = default_value; else x.read(node);}main()函数内主程序如图所示:

OpenCV:xml文件的读取与写入
OpenCV:xml文件的读取与写入
OpenCV:xml文件的读取与写入
  • 《凹凸世界》如何设置大厅同屏人数
  • 冰原守卫者如何建立队伍
  • 一起来捉妖葫芦小金刚怎么样 葫芦小金刚培养吗
  • 炉石传说老狐狸“马林”的全部战利品
  • 王者人脸识别一定要本人吗
  • 热门搜索
    传统文化手抄报图片 少数民族手抄报 手抄报图片大全3年级 武汉加油手抄报 手抄报版面设计花边 少年强则国强手抄报 清明节手抄报简单 快乐寒假手抄报 健康心理手抄报 科技手抄报内容大全