• 《学习OpenCV》练习题第三章第八题b


      1 #include <highgui.h>
      2 #include <cv.h>
      3 #include <stdio.h>
      4 
      5 #pragma comment (lib,"opencv_calib3d231d.lib")
      6 #pragma comment (lib,"opencv_contrib231d.lib")
      7 #pragma comment (lib,"opencv_core231d.lib")
      8 #pragma comment (lib,"opencv_features2d231d.lib")
      9 #pragma comment (lib,"opencv_flann231d.lib")
     10 #pragma comment (lib,"opencv_gpu231d.lib")
     11 #pragma comment (lib,"opencv_haartraining_engined.lib")
     12 #pragma comment (lib,"opencv_highgui231d.lib")
     13 #pragma comment (lib,"opencv_imgproc231d.lib")
     14 #pragma comment (lib,"opencv_legacy231d.lib")
     15 #pragma comment (lib,"opencv_ml231d.lib")
     16 #pragma comment (lib,"opencv_objdetect231d.lib")
     17 #pragma comment (lib,"opencv_ts231d.lib")
     18 #pragma comment (lib,"opencv_video231d.lib")
     19 
     20 /*
     21  *《学习OpenCV》第三章第八题b
     22  * 完成时间:19:46 4/4 星期四 2013
     23  */
     24 
     25 #define ARRAY_LENGTH 10    // 数组长度
     26 
     27 typedef struct my_struct
     28 {
     29     int i;
     30     CvPoint point;
     31     CvRect rect;
     32 } MyStruct;
     33 
     34 void write_my_struct(CvFileStorage * fs, const char* name, my_struct*  ms)
     35 {
     36     //开始写数据
     37     cvStartWriteStruct(fs, name, 6);
     38 
     39     //写入一个 整数
     40     cvStartWriteStruct(fs,"integer",CV_NODE_SEQ);
     41     cvWriteInt(fs,NULL,ms->i);
     42     cvEndWriteStruct(fs);
     43 
     44     //写入cvpoint结构
     45     cvStartWriteStruct(fs,"CvPoint",CV_NODE_SEQ);
     46     cvWriteInt(fs,NULL,ms->point.x);
     47     cvWriteInt(fs,NULL,ms->point.y);
     48     cvEndWriteStruct(fs);
     49     
     50     //写入rect结构体
     51     cvStartWriteStruct(fs,"CvRect",CV_NODE_SEQ);
     52     cvWriteInt(fs,NULL,ms->rect.x);
     53     cvWriteInt(fs,NULL,ms->rect.y);
     54     cvWriteInt(fs,NULL,ms->rect.height);
     55     cvWriteInt(fs,NULL,ms->rect.width);
     56     cvEndWriteStruct(fs);
     57      
     58     //结束写数据
     59     cvEndWriteStruct(fs);
     60 }
     61 
     62 void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms)
     63 {
     64     // 读第一个整数
     65     // 注意:这里应使用node->data.i的value来读取Integer
     66     int i = cvGetFileNodeByName(fs, ms_node, "integer")->data.i;
     67     ms->i = i;
     68 
     69     // 读CvPoint结构
     70     CvSeq *s1 = cvGetFileNodeByName(fs, ms_node, "CvPoint")->data.seq;
     71     CvPoint point;
     72     point.x= cvReadInt((CvFileNode*)cvGetSeqElem(s1,0));
     73     point.y= cvReadInt((CvFileNode*)cvGetSeqElem(s1,1));
     74     ms->point = point;
     75 
     76     // 读取CvRect结构
     77     CvSeq *s2 = cvGetFileNodeByName(fs, ms_node, "CvRect")->data.seq;
     78     CvRect rect;
     79     rect.x=cvReadInt((CvFileNode*)cvGetSeqElem(s2, 0));
     80     rect.y=cvReadInt((CvFileNode*)cvGetSeqElem(s2, 1));
     81     rect.width=cvReadInt((CvFileNode*)cvGetSeqElem(s2, 3));
     82     rect.height=cvReadInt((CvFileNode*)cvGetSeqElem(s2, 2));
     83     ms->rect = rect;
     84 }
     85 
     86 // 将MyStruct的值显示出来
     87 void ShowStructValue(MyStruct* pvalue)
     88 {
     89     printf("integer:%d\n", pvalue->i);
     90     printf("CvPoint: (%d, %d)\n", pvalue->point.x, pvalue->point.y );
     91     printf("CvRect: h-->%d\tw-->%d\t(%d, %d)\n", pvalue->rect.height, 
     92         pvalue->rect.width, pvalue->rect.x, pvalue->rect.y);
     93 }
     94 
     95 // 检查两个MyStruct是否一致
     96 bool check(MyStruct* msValue1, MyStruct* msValue2)
     97 {
     98     if( (msValue1->i == msValue2->i) && 
     99         (msValue1->point.x == msValue2->point.x) &&
    100         (msValue1->point.y == msValue2->point.y) && 
    101         (msValue1->rect.height == msValue2->rect.height) && 
    102         (msValue1->rect.width == msValue2->rect.width) && 
    103         (msValue1->rect.x == msValue2->rect.x) && 
    104         (msValue1->rect.y == msValue2->rect.y) )
    105         return true;
    106     else 
    107         return false;
    108 }
    109 
    110 int main()
    111 {
    112     /* 写数据部分 */
    113     MyStruct msArray[ARRAY_LENGTH];
    114 
    115     CvFileStorage* fs = cvOpenFileStorage("My_struct.xml", 0, CV_STORAGE_WRITE);
    116     char pchTag[12]; 
    117     // 随机生成数据
    118     for(int i = 0; i < ARRAY_LENGTH; i++)
    119     {
    120         CvRNG rng = cvRNG(cvGetTickCount());
    121         
    122         msArray[i].i = cvRandInt(&rng) % 256;
    123         msArray[i].point = cvPoint( cvRandInt(&rng) % 1000, cvRandInt(&rng) % 1000);
    124         msArray[i].rect = cvRect( cvRandInt(&rng) % 1000, cvRandInt(&rng) % 1000,
    125             cvRandInt(&rng) % 600, cvRandInt(&rng) % 600 );
    126 
    127         // 最后一个整数计数
    128         sprintf( pchTag, "my_struct_%d", i );
    129         write_my_struct(fs, pchTag, &msArray[i]);
    130     }
    131 
    132     cvReleaseFileStorage(&fs);
    133 
    134     /* 读数据部分 */
    135     fs = cvOpenFileStorage("My_struct.xml", NULL, CV_STORAGE_READ );
    136     MyStruct msArrayRead[ARRAY_LENGTH];
    137      CvFileNode *pnode; 
    138 
    139     for(int i = 0; i < ARRAY_LENGTH; i++)
    140     {
    141         sprintf( pchTag, "my_struct_%d", i );
    142         pnode = cvGetFileNodeByName(fs, NULL, pchTag);
    143         read_my_struct( fs, pnode, &msArrayRead[i] );
    144 
    145         // 显示
    146         printf("---------------------- %d: Write -------------------------\n", i);
    147         ShowStructValue( &msArray[i]);
    148         printf("---------------------- %d: Read --------------------------\n", i);
    149         ShowStructValue( &msArrayRead[i]);
    150         // 检查读写是否一致
    151         if(check(&msArray[i], &msArrayRead[i] ))
    152         {
    153             printf("Consistent?:\tAnswer: True\n");
    154         }
    155         else
    156         {
    157             printf("Consistent?:\tAnswer: False\n");
    158         }
    159         getchar();
    160     }
    161 
    162     cvReleaseFileStorage(&fs); 
    163 
    164     return 0;
    165 }

    对应的XML文件:

    运行结果:

  • 相关阅读:
    windows server 2008 x64 上asp.net 调用 word, excel 出错的解决方式
    在Azure VM上架设Surv-U FTP 服务器
    关于windows event log 的若干记录
    postman-变量/环境/过滤等
    每秒处理10万高并发订单的乐视集团支付系统架构分享
    Chai.js断言库API中文文档【转载】
    SharePoint 2013 如何打包一个应用
    SharePoint 2013 如何获取当前站点对应的“应用目录”中的“适用于SharePoint的应用程序”列表
    一个吊丝android个人开发者的逆袭之路
    开发者说说广告的事
  • 原文地址:https://www.cnblogs.com/qdsclove/p/3012300.html
Copyright © 2020-2023  润新知