/**********************************************************************************************************************
程序功能:
一个测试FileStorage类读写运作方式的Demo
开发环境:
OpenCv2.4.8 + VS2012 + Halocn10.0 + Win10
时间地点:
陕西师范大学 2016.10.9
作者信息:
九月----马卫飞
***********************************************************************************************************************/
#include <stdio.h>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
void help()
{
std::cout<<"【1】【帮助信息】请在【项目】-->【属性】-->【调试】-->【命令参数】输入XXX.xml的文件名"<<std::endl;
std::cout<<"【2】【帮助信息】此文件名就是我们将要使用cv::FileStorage的<<和>>操作符进行读写的XML文件"<<std::endl;
}
class MyData
{
public:
MyData() : A(0), X(0), id() //【1】带初始化列表的构造函数
{}
explicit MyData(int) : A(97), X(CV_PI), id("mydata1234") //【2】显式的带初始化列表的构造函数
{}
void write(FileStorage& fs) const //【3】常成员函数
{
fs << "{" << "A" << A << "X" << X << "id" << id << "}";
}
void read(const FileNode& node)
{
A = (int)node["A"];
X = (double)node["X"];
id = (string)node["id"];
}
public:
int A;
double X;
string id;
};
void write(FileStorage& fs, const std::string&, const MyData& x)
{
x.write(fs);
}
void read(const FileNode& node, MyData& x, const MyData& default_value = MyData()){
if(node.empty())
x = default_value;
else
x.read(node);
}
ostream& operator<<(ostream& out, const MyData& m)
{
out << "{ id = " << m.id << ", ";
out << "X = " << m.X << ", ";
out << "A = " << m.A << "}";
return out;
}
/*************************************************【Main函数】*********************************************************
*模块说明:
* 控制台应用程序的入口,我们的程序从此块开始执行
**********************************************************************************************************************/
int main(int argc, char** argv)
{
if(argc!=2)
{
help();
std::system("pause");
return -1;
}
std::string strFileName = argv[1];
cv::Mat R = cv::Mat_<uchar>::eye(3,3);
cv::Mat T = cv::Mat_<double>::zeros(3,1);
MyData m(1); //【0】调用带参数的构造函数
cv::FileStorage fs;
fs.open(argv[1],cv::FileStorage::WRITE);
if(fs.isOpened())
{
std::cout<<"【帮助信息】XML文件成功打开!"<<std::endl;
}
else
{
std::cout<<"【帮助信息】XML文件打开失败!"<<std::endl;
}
//=========================================================================================
//模块说明:
// cv::FileStorage 写操作的Demo
//=========================================================================================
{
fs<<"iterationNr"<<100; //【1】写基本的FileStorage结点数据
fs<<"[";
fs<<100;
fs<<1000;
fs<<"]";
//【2】写Vector和数组类型的字符串序列
fs<<"strings";
fs<<"[";
fs<<"img1,jpg"<<"maweifei"<<"bound.png";
fs<<"]";
fs<<"Map"; //【3】写map类型结构的操作
fs<<"{";
fs<<"One"<<1;
fs<<"Two"<<2;
fs<<"}";
//【4】写cv::Mat矩阵结构数据
fs<<"Rotation_Matrix";
fs<<"[";
fs << "R" << R;
fs<<"]";
fs<<"Translation_Matrix";
fs<<"[";
fs<< T;
fs<<"]";
//【5】写自己的数据类型
fs << "MyData" << m;
fs.release(); // explicit close
cout << "Write Done." << endl;
}
std::system("pause");
fs.release();
return 0;
}
OpenCv中FileStorage类读写XML文件的示例Demo
最新推荐文章于 2022-12-13 11:09:29 发布