opencv教程专栏:http://blog.csdn.net/Augusdi/article/category/747412
- intsub_test_opencv_xml_write(void)
- {
-
- CvFileStorage*fs=cvOpenFileStorage("test.xml",CV_STORAGE_WRITE);
- //写注释
- cvWriteComment(fs,"测试写XML文件",1);
-
-
- cvStartWriteStruct(fs,"Employee",CV_NODE_MAP);
- //注释
- cvWriteComment(fs,"MAP类型,姓名,年龄,薪水",1);
- //姓名
- cvWriteString(fs,"name","刘越");
- //年龄
- cvWriteInt(fs,"age",18);
- //薪水
- cvWriteReal(fs,"salary",2780.3);
- //销售次数
- "sales_count",4);
- //销售具体数据
- intsales_record[]={30000,4200,50090};
- //注释
- "SEQ类型,销售记录",0); background-color:inherit">//开始写结构,类型是序列sequence,无名字的有序节点集合
- cvStartWriteStruct(fs,"sales_record",CV_NODE_SEQ);
- //前3条销售记录
- cvWriteRawData(fs,sales_record,3,"i");
- //第4条销售记录,注意无名字
- cvWriteInt(fs,6100);
- //结束
- cvEndWriteStruct(fs);
- }
- "MAP类型,亲友",0); background-color:inherit">//开始
- "Parent",CV_NODE_MAP);
- //父亲
- cvWriteString(fs,"father","杨舜");
- //母亲
- "mother","王娟");
- //结束
- cvEndWriteStruct(fs);
- //释放文件存储对象
- cvReleaseFileStorage(&fs);
- }
- intsub_test_opencv_xml_read(void)
- {
- //文件节点
- CvFileNode*node,*node2;
- char*str;
- intcount;
- int*d;
- //cve_dm.debug_break();
- //打开XML文件
- //获得第一层数据节点
- node=cvGetFileNodeByName(fs,"Employee");
- str=cvReadStringByName(fs,node,"name");
- printf("n姓名=%s",str);
- printf("n年龄=%d",cvReadIntByName(fs,"age"));
- printf("n薪水=%g",cvReadRealByName(fs,"salary"));
- count=cvReadIntByName(fs,"sales_count");
- printf("n销售%d条",count);
- d=cvAlloc(sizeof(int)*count);
- if(d)
- inti;
- node2=cvGetFileNodeByName(fs,"sales_record");
- if(node2)
- cvReadRawData(fs,node2,d,108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; margin:0px!important; padding:0px 3px 0px 10px!important"> printf("n销售记录=");
- for(i=0;i<count;i++)
- printf("%d,",d[i]);
- cvFree(&d);
- //获得第二层节点
- "Parent");
- printf("n根节点=%s",cvGetFileNodeName(node));
- str=cvReadStringByName(fs,"father");
- printf("n父亲=%s",str);
- "mother");
- printf("n母亲=%s",248)"> }
1.写XMl文件,
voidCrecognitionDlg::storeDirectoryFaces(){
- CvFileStorage*fileStorage;
- fileStorage=cvOpenFileStorage("directoryInfo.xml",CV_STORAGE_WRITE);
- cvWriteInt(fileStorage,"nFaces",indexFaces.size());
- cvStartWriteStruct(fileStorage,"CVFaceRecog",CV_NODE_MAP);
- for(size_ti=0;i<indexFaces.size();i++)
- charperson[100];
- sprintf(person,"person_%d",(i+1));//必须区分开,否则读的时候会出问题
- cvStartWriteStruct(fileStorage,person,CV_NODE_MAP);
- cvWriteInt(fileStorage,"index",indexFaces.at(i));
- cvWriteString(fileStorage,"name",namePerson.at(i));
- cvWriteString(fileStorage,"directory",pathFaces.at(i));
- cvEndWriteStruct(fileStorage);
- cvReleaseFileStorage(&fileStorage);
- }
写完的内容如下:
<?xmlversion="1.0"?>
- opencv_storage>
- nFaces>3</>
- CVFaceRecogperson_1index>0name>aaadirectory>C:Pictureskobe>person_2>1>bbb>C:PicturesLiperson_3>2>ccc>C:PicturesSun>
2.读XML
intCrecognitionDlg::loadDirectoryFaces(){
- CvFileStorage*fileStorage=NULL;
- inti;
- CvSeq*seq;
- CvSeqReaderreader;
- fileStorage=cvOpenFileStorage("directoryInfo.xml",108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; margin:0px!important; padding:0px 3px 0px 10px!important"> if(!fileStorage){
- return0;
- namePerson.clear();
- pathFaces.clear();
- indexFaces.clear();
- CvFileNode*root=cvGetRootFileNode(fileStorage,0);
- CvFileNode*data=cvGetFileNodeByName(fileStorage,root,"CVFaceRecog");
- seq=data->data.seq;
- cvStartReadSeq(seq,&reader,0);
- intnFaces=cvReadIntByName(fileStorage,"nFaces",0);
- for(i=0;i<nFaces;i++)
- CvFileNode*pt=(CvFileNode*)reader.ptr;
- namePerson.push_back(cvReadStringByName(fileStorage,pt,0));
- pathFaces.push_back(cvReadStringByName(fileStorage,"directory",0));
- indexFaces.push_back(cvReadIntByName(fileStorage,"index",248)"> CV_NEXT_SEQ_ELEM(seq->elem_size,reader);
- cvReleaseFileStorage(&fileStorage);
- return0;
- }
FileStoragefs("test.yml",FileStorage::WRITE);
- fs<<"frameCount"<<5;
- time_trawtime;time(&rawtime);
- fs<<"calibrationDate"<<asctime(localtime(&rawtime));
- MatcameraMatrix=(Mat_<double>(3,3)<<1000,320,1000,240,1);
- MatdistCoeffs=(Mat_<double>(5,1)<<0.1,0.01,-0.001,0);
- fs<<"cameraMatrix"<<cameraMatrix<<"distCoeffs"<<distCoeffs;
-
- //features为一个大小为3的向量,其中每个元素由随机数x,y和大小为8的uchar数组组成
- fs<<"features"<<"[";
- for(inti=0;i<3;i++)
- intx=rand()%640;
- inty=rand()%480;
- ucharlbp=rand()%256;
- fs<<"{:"<<"x"<<x<<"y"<<y<<"lbp"<<"[:";
- intj=0;j<8;j++)
- fs<<((lbp>>j)&1);
- fs<<"]"<<"}";
- fs<<"]";
- fs.release();
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|