当前位置:网站首页 > 创业 > 正文

OpenCV:xml文件的读取与写入

0 张子豪 张子豪 2025-10-12 08:25 1

绪:

xml是Extensible Markup Language可扩展标识表记标帜说话的简写;

本文本家儿要介绍:

xml文件布局;

xml文件的读和写;

xml文件中-vector数据布局;

xml文件中-map数据布局;

遍历xml文件节点;

xml中自界说布局存储;

东西/原料

  • OpenCV 2410

方式/步调

  1. 1

    xml文件布局:

    ①xml文件的第一行为xml文件申明,一般申明了xml的版本和编码信息;

    如:

    <? xmlversion="1.0" encoding="UTF-8"?>

    ②xml文件的第二行为xml的肇端节点,也是根节点;

    Opencv的xml文件默认的根节点为:

    <opencv_storage>……</opencv_storage>

    ③每个xml文件有且只有一个根节点,其他节点都包含在这个根节点之内,每个节点又可以包含若干个子节点。

  2. 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的体例来打开!

  3. 3

    xml文件中-vector数据布局:

    vector数据,xml文件节点,不包含子节点;

    在输入vector数据的起头和结从头至尾要别离输入“[”,“]”;

    【注】:在输入vector数据前要先输入标签名称;

  4. 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;

    }

  5. 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>的子节点。

  6. 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. 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()

    函数内本家儿法式如图所示:

注重事项

  • xml文件的第一行为xml文件申明,一般申明了xml的版本和编码信息;
  • xml文件的第二行为xml的肇端节点,也是根节点;
  • 每个xml文件有且只有一个根节点,其他节点都包含在这个根节点之内,每个节点又可以包含若干个子节点。

来源:百闻(微信/QQ号:9397569),转载请保留出处和链接!


本文链接:https://www.ibaiwen.com/web/239529.html

张子豪

张子豪

TA很懒,啥都没写...

@百闻娱乐 本站部分内容转自互联网,若有侵权等问题请及时与本站联系,我们将在第一时间删除处理。 | 粤ICP备2024343649号 | (地图