opencv 读写xml文件
来源:互联网 发布:python range(2,1) 编辑:程序博客网 时间:2024/06/06 08:32
自己整理的,使用OPENCV读写XML文件的数组,不是很完善,欢迎拍砖!
//将图片存为xml文件程序:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include <highgui.h>
#include "cxcore.h"
struct CatInfo {
string Title;
int TotalCnt;
} ;
void my_opencv_xml_write(void);
int main()
{
struct CatInfo Cats[3];//类别数组
Cats[0].Title= "S01";
Cats[0].TotalCnt=10;
Cats[1].Title= "S02";
Cats[1].TotalCnt=20;
Cats[2].Title= "S03";
Cats[2].TotalCnt=30;
CvFileStorage* fs = cvOpenFileStorage( "upimg_matched_points.xml", 0, CV_STORAGE_WRITE );
if(!fs)
{
return -1;
}
cvStartWriteStruct(fs, "CatInfo", CV_NODE_MAP);//对应于 读取时父节点的子节点
char SN[256];//序号
int max = 3;//类别数组元素个数
for(int i=0; i<max; i++)
{
sprintf(SN, "%d", i);
char CatType[256] = "CatInfo";//初始化
char* Key = strcat(CatType, SN);//拼接关键字,以免重复
cvStartWriteStruct(fs, Key, CV_NODE_MAP, Cats[i].Title.c_str());//子节点的子节点,参数2:【不能重名】
cvWriteString(fs, "Title", Cats[i].Title.c_str());
cvWriteInt(fs, "TotalCnt", Cats[i].TotalCnt);
cvEndWriteStruct(fs);
}
cvEndWriteStruct(fs);
cvReleaseFileStorage(&fs);
/*文件内容
<?xml version="1.0"?>
<opencv_storage>
<CatInfo>
<CTitle1 type_id="S01">
<Title>S01</Title>
<TotalCnt>10</TotalCnt>
</CTitle1>
<CTitle2 type_id="S02">
<Title>S02</Title>
<TotalCnt>20</TotalCnt>
</CTitle2>
</CatInfo>
</opencv_storage>
*/
CvSeq* seq; //节点序列
CvSeqReader reader;//阅读器
fs = cvOpenFileStorage( "upimg_matched_points.xml", 0, CV_STORAGE_READ );//打开文件
CvFileNode* data1 = cvGetRootFileNode( fs, 0);//读出<opencv_storage>节点
CvFileNode* data = cvGetFileNodeByName( fs, data1, "CatInfo" );//读出父节点的子节点
seq = data->data.seq;//读出子节点内所含节点列表
cvStartReadSeq( seq, &reader, 0 );//将阅读器与节点序列头部关联
vector<CatInfo> CatList;
int ElemCnt = seq->header_size/seq->elem_size;//列表元素个数
for(i = 0; i < ElemCnt; i++)//如何判断reader指向了最后一个节点???
{
//获取阅读器所指节点
CvFileNode *pt=(CvFileNode*)reader.ptr;
CatInfo newCat;
newCat.Title = cvReadStringByName(fs, pt, "Title", "unknown");
newCat.TotalCnt = cvReadIntByName(fs, pt, "TotalCnt", 0);
//附加新节点
CatList.push_back(newCat);
//移动到下一个节点。elem_size类似于结构体大小,移动步长。
CV_NEXT_SEQ_ELEM(seq->elem_size, reader);
}
cvReleaseFileStorage(&fs);
return 0;
}
///////////////////////////////下面转发一个函数,有点复杂,留着以后用///////////////////////////
//有关写入复杂内容的函数例子
void my_opencv_xml_write(void)
{
char pID[] = "0001";
int featureCount = 10;
// 具体数据
int _record[]={30000,4200,50090};
//创建文件存储对象
CvFileStorage *fs=cvOpenFileStorage("test.xml",0,CV_STORAGE_WRITE);
// 写注释
cvWriteComment(fs,"Person Feature Analysis NO.0001",1);
// 开始写结构,类型是图map,也就是有名字的无序节点集合
cvStartWriteStruct(fs, "Person", CV_NODE_MAP, pID , cvAttrList(NULL,NULL));
//{
//1
cvWriteComment(fs,"Face Feature NO.001",1);
// 开始写结构,类型是图map,也就是有名字的无序节点集合
cvStartWriteStruct(fs, "Face_Feature", CV_NODE_MAP, "001", cvAttrList(NULL,NULL));
// {
//注释Properties
cvWriteComment(fs,"MAPTYPE Properties",1);
// 开始写结构,类型是图map,也就是有名字的无序节点集合
cvStartWriteStruct(fs, "Properties", CV_NODE_MAP, NULL, cvAttrList(NULL,NULL));
// 注释
cvWriteComment(fs,"MAPType, name, age",0);
// 姓名
cvWriteString(fs,"name","liuyue", 0);
// 年龄
cvWriteInt(fs,"age",18);
// 特征值
cvWriteInt(fs,"feature_count",featureCount);
// 结束Properties
cvEndWriteStruct(fs);
// }
// {
// 注释Feature
cvWriteComment(fs,"SEQType Feature",1);
// 开始写结构,类型是序列sequence,无名字的有序节点集合
cvStartWriteStruct(fs,"Feature",CV_NODE_SEQ, NULL, cvAttrList(NULL,NULL));
// 前3条记录
cvWriteRawData(fs,_record,3,"i");
// 第4条记录,注意无名字
cvWriteInt(fs,0,6100);
// 结束Feature
cvEndWriteStruct(fs);
// }
// 结束1
cvEndWriteStruct(fs);
// }
// {
//2
cvWriteComment(fs,"Face Feature NO.002",1);
// 开始写结构,类型是图map,也就是有名字的无序节点集合
cvStartWriteStruct(fs, "Face_Feature", CV_NODE_MAP, "002", cvAttrList(NULL,NULL));
// {
//注释Properties
cvWriteComment(fs,"MAPTYPE Properties",1);
// 开始写结构,类型是图map,也就是有名字的无序节点集合
cvStartWriteStruct(fs, "Properties", CV_NODE_MAP, NULL, cvAttrList(NULL,NULL));
// 注释
cvWriteComment(fs,"MAPType, name, age",0);
// 姓名
cvWriteString(fs,"name","liuyue", 0);
// 年龄
cvWriteInt(fs,"age",18);
// 特征值
cvWriteInt(fs,"feature_count",featureCount);
// 结束Properties
cvEndWriteStruct(fs);
// }
// {
// 注释Feature
cvWriteComment(fs,"SEQType Feature",1);
// 开始写结构,类型是序列sequence,无名字的有序节点集合
cvStartWriteStruct(fs,"Feature",CV_NODE_SEQ, NULL, cvAttrList(NULL,NULL));
// 前3条记录
cvWriteRawData(fs,_record,3,"i");
// 第4条记录,注意无名字
cvWriteInt(fs,0,6100);
// 结束Feature
cvEndWriteStruct(fs);
// }
// 结束2
cvEndWriteStruct(fs);
// }
// 结束
cvEndWriteStruct(fs);
// 释放文件存储对象
cvReleaseFileStorage(&fs);
}
- opencv 读写xml文件
- opencv的XML文件读写
- opencv读写xml 、yml文件
- OpenCV笔记(一)-XML文件读写
- OpenCV FileStorage类读写XML/YML文件
- OpenCV FileStorage类读写XML/YML文件
- opencv下XML 文件的读写
- OpenCV FileStorage类读写XML/YML文件
- OpenCV FileStorage类读写XML/YML文件
- opencv下XML 文件的读写 很全滴
- OpenCV FileStorage类读写XML/YML文件
- opencv下XML 文件的读写
- OpenCV FileStorage类读写XML/YML文件
- opencv学习笔记之xml文件读写
- OpenCV中XML文件和YAML文件的读写
- OpenCv xml读写
- OpenCv的xml读写
- opencv学习-读写xml
- 使用java的java.nio.channels.FileLock,实现程序对文件的独占读写.
- Norton 360 V5.0简介及90天Microsoft OEM版下载
- 同步软件、网络同步、备份、分享工具
- 关于CSV文件格式中的换行问题
- 从HTML文件中抽取正文的简单方案 试验结果
- opencv 读写xml文件
- 深入理解BIOS
- vi替换字符串(zz)(转)
- poj1665 ……
- Eclipse中的快捷键(收集)
- XPathDocument的相关用法(待整理)
- 直面经典:重温KMP(不着一图,尽得精髓)
- setTimeout
- 文章链接阅读空间