OpenCv的xml读写(opencv教程大全)

前端之家收集整理的这篇文章主要介绍了OpenCv的xml读写(opencv教程大全)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

opencv教程专栏:http://blog.csdn.net/Augusdi/article/category/747412

  1. int@H_301_7@sub_test_opencv_xml_write(@H_301_7@void@H_301_7@)@H_301_7@@H_301_7@
  2. {@H_301_7@
  3. //创建文件存储对象@H_301_7@@H_301_7@@H_301_7@
  4. CvFileStorage*fs=cvOpenFileStorage("test.xml"@H_301_7@,CV_STORAGE_WRITE);@H_301_7@@H_301_7@
  5. //写注释@H_301_7@@H_301_7@@H_301_7@
  6. cvWriteComment(fs,"测试写XML文件"@H_301_7@,1);@H_301_7@@H_301_7@
  7. @H_301_7@
  8. //开始写结构,类型是图map,也就是有名字的无序节点集合@H_301_7@@H_301_7@@H_301_7@
  9. cvStartWriteStruct(fs,"Employee"@H_301_7@,CV_NODE_MAP);@H_301_7@@H_301_7@
  10. //注释@H_301_7@@H_301_7@@H_301_7@
  11. cvWriteComment(fs,"MAP类型,姓名,年龄,薪水"@H_301_7@,1);@H_301_7@@H_301_7@
  12. //姓名@H_301_7@@H_301_7@@H_301_7@
  13. cvWriteString(fs,"name"@H_301_7@,@H_301_7@"刘越"@H_301_7@);@H_301_7@@H_301_7@
  14. //年龄@H_301_7@@H_301_7@@H_301_7@
  15. cvWriteInt(fs,"age"@H_301_7@,18);@H_301_7@@H_301_7@
  16. //薪水@H_301_7@@H_301_7@@H_301_7@
  17. cvWriteReal(fs,"salary"@H_301_7@,2780.3);@H_301_7@@H_301_7@
  18. //销售次数@H_301_7@@H_301_7@@H_301_7@
  19. "sales_count"@H_301_7@,4);@H_301_7@@H_301_7@
  20. //销售具体数据@H_301_7@@H_301_7@@H_301_7@
  21. int@H_301_7@sales_record[]={30000,4200,50090};@H_301_7@@H_301_7@
  22. //注释@H_301_7@@H_301_7@@H_301_7@
  23. "SEQ类型,销售记录"@H_301_7@,0); background-color:inherit">//开始写结构,类型是序列sequence,无名字的有序节点集合@H_301_7@@H_301_7@@H_301_7@
  24. cvStartWriteStruct(fs,"sales_record"@H_301_7@,CV_NODE_SEQ);@H_301_7@@H_301_7@
  25. //前3条销售记录@H_301_7@@H_301_7@@H_301_7@
  26. cvWriteRawData(fs,sales_record,3,"i"@H_301_7@);@H_301_7@@H_301_7@
  27. //第4条销售记录,注意无名字@H_301_7@@H_301_7@@H_301_7@
  28. cvWriteInt(fs,6100);@H_301_7@
  29. //结束@H_301_7@@H_301_7@@H_301_7@
  30. cvEndWriteStruct(fs);@H_301_7@
  31. }@H_301_7@
  32. "MAP类型,亲友"@H_301_7@,0); background-color:inherit">//开始@H_301_7@@H_301_7@@H_301_7@
  33. "Parent"@H_301_7@,CV_NODE_MAP);@H_301_7@@H_301_7@
  34. //父亲@H_301_7@@H_301_7@@H_301_7@
  35. cvWriteString(fs,"father"@H_301_7@,@H_301_7@"杨舜"@H_301_7@);@H_301_7@@H_301_7@
  36. //母亲@H_301_7@@H_301_7@@H_301_7@
  37. "mother"@H_301_7@,@H_301_7@"王娟"@H_301_7@);@H_301_7@@H_301_7@
  38. //结束@H_301_7@@H_301_7@@H_301_7@
  39. cvEndWriteStruct(fs);@H_301_7@
  40. //释放文件存储对象@H_301_7@@H_301_7@@H_301_7@
  41. cvReleaseFileStorage(&fs);@H_301_7@
  42. }@H_301_7@
  43. int@H_301_7@sub_test_opencv_xml_read(@H_301_7@void@H_301_7@)@H_301_7@@H_301_7@
  44. {@H_301_7@
  45. //文件节点@H_301_7@@H_301_7@@H_301_7@
  46. CvFileNode*node,*node2;@H_301_7@
  47. char@H_301_7@*str;@H_301_7@@H_301_7@
  48. int@H_301_7@count;@H_301_7@@H_301_7@
  49. int@H_301_7@*d;@H_301_7@@H_301_7@
  50. //cve_dm.debug_break();@H_301_7@@H_301_7@@H_301_7@
  51. //打开XML文件@H_301_7@@H_301_7@@H_301_7@
  52. 301_7@@H_301_7@
  53. //获得第一层数据节点@H_301_7@@H_301_7@@H_301_7@
  54. node=cvGetFileNodeByName(fs,"Employee"@H_301_7@);@H_301_7@@H_301_7@
  55. str=cvReadStringByName(fs,node,"name"@H_301_7@);@H_301_7@@H_301_7@
  56. printf("\n姓名=%s"@H_301_7@,str);@H_301_7@@H_301_7@
  57. printf("\n年龄=%d"@H_301_7@,cvReadIntByName(fs,@H_301_7@"age"@H_301_7@));@H_301_7@@H_301_7@
  58. printf("\n薪水=%g"@H_301_7@,cvReadRealByName(fs,@H_301_7@"salary"@H_301_7@));@H_301_7@@H_301_7@
  59. count=cvReadIntByName(fs,"sales_count"@H_301_7@);@H_301_7@@H_301_7@
  60. printf("\n销售%d条"@H_301_7@,count);@H_301_7@@H_301_7@
  61. d=cvAlloc(sizeof@H_301_7@(@H_301_7@int@H_301_7@)*count);@H_301_7@@H_301_7@
  62. if@H_301_7@(d)@H_301_7@@H_301_7@
  63. int@H_301_7@i;@H_301_7@@H_301_7@
  64. node2=cvGetFileNodeByName(fs,"sales_record"@H_301_7@);@H_301_7@@H_301_7@
  65. if@H_301_7@(node2)@H_301_7@@H_301_7@
  66. 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销售记录="@H_301_7@);@H_301_7@@H_301_7@
  67. for@H_301_7@(i=0;i<count;i++)@H_301_7@@H_301_7@
  68. printf("%d,"@H_301_7@,d[i]);@H_301_7@@H_301_7@
  69. cvFree(&d);@H_301_7@
  70. //获得第二层节点@H_301_7@@H_301_7@@H_301_7@
  71. "Parent"@H_301_7@);@H_301_7@@H_301_7@
  72. printf("\n根节点=%s"@H_301_7@,cvGetFileNodeName(node));@H_301_7@@H_301_7@
  73. str=cvReadStringByName(fs,"father"@H_301_7@);@H_301_7@@H_301_7@
  74. printf("\n父亲=%s"@H_301_7@,str);@H_301_7@@H_301_7@
  75. "mother"@H_301_7@);@H_301_7@@H_301_7@
  76. printf("\n母亲=%s"@H_301_7@,248)"> }@H_301_7@

1.写XMl文件,

[html] view plain copy@H_301_7@
@H_301_7@
    voidCrecognitionDlg::storeDirectoryFaces(){@H_301_7@@H_301_7@
  1. CvFileStorage*fileStorage;@H_301_7@
  2. fileStorage@H_301_7@=@H_301_7@cvOpenFileStorage@H_301_7@("directoryInfo.xml",CV_STORAGE_WRITE);@H_301_7@@H_301_7@
  3. cvWriteInt(fileStorage,"nFaces",indexFaces.size());@H_301_7@
  4. cvStartWriteStruct(fileStorage,"CVFaceRecog",CV_NODE_MAP);@H_301_7@
  5. for(size_ti@H_301_7@=@H_301_7@0@H_301_7@;i@H_301_7@<@H_301_7@indexFaces.size@H_301_7@();i++)@H_301_7@@H_301_7@
  6. charperson[100];@H_301_7@
  7. sprintf(person,"person_%d",(i+1));//必须区分开,否则读的时候会出问题@H_301_7@
  8. cvStartWriteStruct(fileStorage,person,CV_NODE_MAP);@H_301_7@
  9. cvWriteInt(fileStorage,"index",indexFaces.at(i));@H_301_7@
  10. cvWriteString(fileStorage,"name",namePerson.at(i));@H_301_7@
  11. cvWriteString(fileStorage,"directory",pathFaces.at(i));@H_301_7@
  12. cvEndWriteStruct(fileStorage);@H_301_7@
  13. cvReleaseFileStorage(&fileStorage);@H_301_7@
  14. }@H_301_7@

写完的内容如下:

copy@H_301_7@
@H_301_7@
    <?@H_301_7@xml@H_301_7@@H_301_7@version@H_301_7@=@H_301_7@"1.0"@H_301_7@?>@H_301_7@@H_301_7@@H_301_7@
  1. opencv_storage@H_301_7@>@H_301_7@@H_301_7@@H_301_7@
  2. nFaces@H_301_7@>@H_301_7@3@H_301_7@</@H_301_7@>@H_301_7@@H_301_7@@H_301_7@
  3. CVFaceRecog@H_301_7@person_1@H_301_7@index@H_301_7@>@H_301_7@0@H_301_7@name@H_301_7@>@H_301_7@aaa@H_301_7@directory@H_301_7@>@H_301_7@C:\Pictures\kobe@H_301_7@>@H_301_7@person_2@H_301_7@>@H_301_7@1@H_301_7@>@H_301_7@bbb@H_301_7@>@H_301_7@C:\Pictures\Li@H_301_7@person_3@H_301_7@>@H_301_7@2@H_301_7@>@H_301_7@ccc@H_301_7@>@H_301_7@C:\Pictures\Sun@H_301_7@>@H_301_7@@H_301_7@@H_301_7@

2.读XML

[cpp] copy@H_301_7@
@H_301_7@
    int@H_301_7@CrecognitionDlg::loadDirectoryFaces(){@H_301_7@@H_301_7@
  1. CvFileStorage*fileStorage=NULL;@H_301_7@
  2. int@H_301_7@i;@H_301_7@@H_301_7@
  3. CvSeq*seq;@H_301_7@
  4. CvSeqReaderreader;@H_301_7@
  5. fileStorage=cvOpenFileStorage("directoryInfo.xml"@H_301_7@,108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; margin:0px!important; padding:0px 3px 0px 10px!important"> if@H_301_7@(!fileStorage){@H_301_7@@H_301_7@
  6. return@H_301_7@0;@H_301_7@@H_301_7@
  7. namePerson.clear();@H_301_7@
  8. pathFaces.clear();@H_301_7@
  9. indexFaces.clear();@H_301_7@
  10. CvFileNode*root=cvGetRootFileNode(fileStorage,0);@H_301_7@
  11. CvFileNode*data=cvGetFileNodeByName(fileStorage,root,"CVFaceRecog"@H_301_7@);@H_301_7@@H_301_7@
  12. seq=data->data.seq;@H_301_7@
  13. cvStartReadSeq(seq,&reader,0);@H_301_7@
  14. int@H_301_7@nFaces=cvReadIntByName(fileStorage,@H_301_7@"nFaces"@H_301_7@,0);@H_301_7@@H_301_7@
  15. for@H_301_7@(i=0;i<nFaces;i++)@H_301_7@@H_301_7@
  16. CvFileNode*pt=(CvFileNode*)reader.ptr;@H_301_7@
  17. namePerson.push_back(cvReadStringByName(fileStorage,pt,0));@H_301_7@@H_301_7@
  18. pathFaces.push_back(cvReadStringByName(fileStorage,"directory"@H_301_7@,0));@H_301_7@@H_301_7@
  19. indexFaces.push_back(cvReadIntByName(fileStorage,"index"@H_301_7@,248)"> CV_NEXT_SEQ_ELEM(seq->elem_size,reader);@H_301_7@
  20. cvReleaseFileStorage(&fileStorage);@H_301_7@
  21. return@H_301_7@0;@H_301_7@@H_301_7@
  22. }@H_301_7@
copy@H_301_7@
@H_301_7@
    FileStoragefs(@H_301_7@"test.yml"@H_301_7@,FileStorage::WRITE);@H_301_7@@H_301_7@
  1. fs<<"frameCount"@H_301_7@<<5;@H_301_7@@H_301_7@
  2. time_t@H_301_7@rawtime;time(&rawtime);@H_301_7@@H_301_7@
  3. fs<<"calibrationDate"@H_301_7@<<asctime(localtime(&rawtime));@H_301_7@@H_301_7@
  4. MatcameraMatrix=(Mat_<double@H_301_7@>(3,3)<<1000,320,1000,240,1);@H_301_7@//又一种Mat初始化方式@H_301_7@@H_301_7@@H_301_7@
  5. MatdistCoeffs=(Mat_<double@H_301_7@>(5,1)<<0.1,0.01,-0.001,0);@H_301_7@@H_301_7@
  6. fs<<"cameraMatrix"@H_301_7@<<cameraMatrix<<@H_301_7@"distCoeffs"@H_301_7@<<distCoeffs;@H_301_7@@H_301_7@
  7. @H_301_7@
  8. //features为一个大小为3的向量,其中每个元素由随机数x,y和大小为8的uchar数组组成@H_301_7@@H_301_7@@H_301_7@
  9. fs<<"features"@H_301_7@<<@H_301_7@"["@H_301_7@;@H_301_7@@H_301_7@
  10. for@H_301_7@(@H_301_7@int@H_301_7@i=0;i<3;i++)@H_301_7@@H_301_7@
  11. int@H_301_7@x=rand()%640;@H_301_7@@H_301_7@
  12. int@H_301_7@y=rand()%480;@H_301_7@@H_301_7@
  13. ucharlbp=rand()%256;@H_301_7@
  14. fs<<"{:"@H_301_7@<<@H_301_7@"x"@H_301_7@<<x<<@H_301_7@"y"@H_301_7@<<y<<@H_301_7@"lbp"@H_301_7@<<@H_301_7@"[:"@H_301_7@;@H_301_7@@H_301_7@
  15. int@H_301_7@j=0;j<8;j++)@H_301_7@@H_301_7@
  16. fs<<((lbp>>j)&1);@H_301_7@
  17. fs<<"]"@H_301_7@<<@H_301_7@"}"@H_301_7@;@H_301_7@@H_301_7@
  18. fs<<"]"@H_301_7@;@H_301_7@@H_301_7@
  19. fs.release();@H_301_7@
copy@H_301_7@
@H_301_7@
    }@H_301_7@

猜你在找的XML相关文章