OpenCv xml读

<?xml version="1.0"?>
<opencv_storage>
<folder>Hello World</folder>
<filename>E:\\4562.jpg</filename>
<!--    
<filename>"E:\\4562.jpg"</filename>
-->
<source>
<database>
<one>123</one>
<two>name</two>
</database>
<image>flickr</image>
</source>
</opencv_storage>


#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

class MyData
{
  public:
	 MyData() : A(0), X(0), id()
	 {
	 }
	 explicit MyData(int) : A(97), X(CV_PI), id("mydata1234") // explicit to avoid implicit conversion
	 {
	 }
	 void write(FileStorage& fs) const //Write serialization for this class
	 {
		fs << "{" << "A" << A << "X" << X << "id" << id << "}";
	 }
	 void read(const FileNode& node) //Read serialization for this class
	 {
		 A = (int)node["A"];
		 X = (double)node["X"];
		 id = (string)node["id"];
	 }
 public: // Data Members
	 int A;
	 double X;
	 string id;
 };

 //These write and read functions must be defined for the serialization in FileStorage to work
 static void write(FileStorage& fs, const std::string&, const MyData& x)
 {
	x.write(fs);
 }
 static void read(const FileNode& node, MyData& x, const MyData& default_value = MyData())
 {
	 if(node.empty())
	 x = default_value;
	 else
	 x.read(node);
 }

 // This function will print our custom class to the console
 static ostream& operator<<(ostream& out, const MyData& m)
 {
	 out << "{ id = " << m.id << ", ";
	 out << "X = " << m.X << ", ";
	 out << "A = " << m.A << "}";
	return out;
 }

 int main(int ac, char** av)
 {
	 string filename ="2007_000027.xml";
	 /*{ //write
		 Mat R = Mat_<uchar>::eye(3, 3),
		 T = Mat_<double>::zeros(3, 1);
		 MyData m(1);

		 FileStorage fs(filename, FileStorage::WRITE);

		 fs << "iterationNr" << 100;
		 fs << "strings" << "["; // text - string sequence
		 fs << "image1.jpg" << "Awesomeness" << "baboon.jpg";
		 fs << "]"; // close sequence

		 fs << "Mapping"; // text - mapping
		 fs << "{" << "One" << 1;
		 fs << "Two" << 2 << "}";

		 fs << "R" << R; // cv::Mat
		 fs << "T" << T;

		 fs << "MyData" << m; // your own data structures

		 fs.release(); // explicit close
		 cout << "Write Done." << endl;
	 }*/

	 {//read
		 cout << endl << "Reading: " << endl;
		 FileStorage fs;
		 fs.open(filename, FileStorage::READ);

		 if (!fs.isOpened())
		 {
		 cerr << "Failed to open " << filename << endl;
		 return 1;
		 }

		 FileNode n = fs["folder"]; // Read string sequence - Get node
		 if (n.type() != FileNode::SEQ)
		 {
		 cerr << "strings is not a sequence! FAIL" << endl;
		 return 1;
		 }

		 FileNodeIterator it = n.begin(), it_end = n.end(); // Go through the node
		 for (; it != it_end; ++it)
			 cout << (string)*it << endl;

		 cout<<(string)fs["filename"]<<endl;; // Read mappings from a sequence

		 FileNode n1 = fs["source"]; // Read string sequence - Get node
		 FileNode n2 = n1["database"];
		 cout << (int)(n2["one"]) <<" ";
		 cout << (string)(n2["two"]) << endl;


		 MyData m;
		 Mat R, T;

		 fs["R"] >> R; // Read cv::Mat
		 fs["T"] >> T;
		 fs["MyData"] >> m; // Read your own structure
		 cout << endl << "R = " << R << endl;
		 cout << "T = " << T << endl << endl;
		 cout << "MyData = " << endl << m << endl << endl;

		 //Show default behavior for non existing nodes
		 cout << "Attempt to read NonExisting (should initialize the data structure with its default).";
		 fs["NonExisting"] >> m;
		 cout << endl << "NonExisting = " << endl << m << endl;
	 }

	 cout << endl
	 << "Tip: Open up " << filename << " with a text editor to see the serialized data." << endl;

	 return 0;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值