数据存储练习题-(OpenCV第3章习题8)

习题描述:创建一个结构“my_struct”,结构中包含一个整数,一个CvPoint 和一个CvRect。

a.写两个函数:void write_my_struct(CvFileStorage* fs,const char* name,my_struct* ms) 和

                     void read_my_struct(CvFileStorage* fs,CvFileNode* ms_node,my_struct* ms)

         用来读/写my_struct。

b.创建一个结构对象test,将数据写入磁盘以及从磁盘读取数据。

 

编码环境:VC2005 & OpenCV2.0

->创建Win32控制台程序

->配置环境:添加库函数

->代码:

 #include "stdafx.h" #include "cv.h" typedef struct my_struct{ int value; CvPoint pos; CvRect rect; } my_struct; void write_my_struct(CvFileStorage* fs,const char* name,my_struct* ms) { cvWriteInt(fs,name,10); //开始写入新的数据结构 cvStartWriteStruct(fs,"Value",CV_NODE_SEQ); cvWriteInt(fs,0,ms->value); //结束写入数据结构 cvEndWriteStruct(fs); cvStartWriteStruct(fs,"Point",CV_NODE_SEQ); cvWriteInt(fs,0,ms->pos.x); cvWriteInt(fs,0,ms->pos.y); cvEndWriteStruct(fs); cvStartWriteStruct(fs,"Rect",CV_NODE_SEQ); cvWriteInt(fs,0,ms->rect.x); cvWriteInt(fs,0,ms->rect.y); cvWriteInt(fs,0,ms->rect.width); cvWriteInt(fs,0,ms->rect.height); cvEndWriteStruct(fs); } void read_my_struct(CvFileStorage* fs,CvFileNode* ms_node,my_struct* ms) { //cvOpenFileStorage这里是读取文件 _READ fs=cvOpenFileStorage("ms.xml",0,CV_STORAGE_READ); //ReadIntByName查找文件节点返回它的值 int value = cvReadIntByName(fs,0,"Value",1); //cvGetFileNodeByName在图表或者文件存储器中查找节点 CvSeq* s = cvGetFileNodeByName(fs,0,"Point")->data.seq; //cvReadInt从文件节点中得到整形值,cvGetSeqElem用来检测序列 int point_x = cvReadInt((CvFileNode*)cvGetSeqElem(s,0)); int point_y = cvReadInt((CvFileNode*)cvGetSeqElem(s,1)); printf("Page:%d/nPosition:x=%d,y=%d/n",value,point_x,point_y); cvReleaseFileStorage(&fs); } int _tmain(int argc, _TCHAR* argv[]) { //cvOpenFileStorage打开文件存储器读写数据,之后建立文件或继续使用现有的文件 //这里是建立文件 _WRITE CvFileStorage* fs=cvOpenFileStorage("ms.xml",0,CV_STORAGE_WRITE); //声明结构myst,并赋值 my_struct myst={10,cvPoint(2,2),cvRect(0,0,5,5)}; //调用write_my_struct函数完成数据写入磁盘 write_my_struct(fs,"Struct",&myst); //使用cvReleaseFileStorage释放CvFileStorage结构句柄 cvReleaseFileStorage(&fs); //将数据从磁盘读入内存 read_my_struct(fs,NULL,&myst); return 0; }

->编译,运行

ms.xml文件:

<?xml version="1.0" ?> - <opencv_storage> <Struct>10</Struct> <Value>10</Value> <Point>2 2</Point> <Rect>0 0 5 5</Rect> </opencv_storage>

以及控制台输出信息:

数据存储练习题-(OpenCV第3章习题8)_第1张图片

 

 

另附:Cxcore数据保存和运行时类型信息参考手册http://www.opencv.org.cn/index.php/Cxcore 

 

(完)

你可能感兴趣的:(数据结构,struct,null,存储,磁盘)