2011-10-12 85 views
0

我有一個yml文件,我想用現有的opencv 1.0函數打開文件進行閱讀。該文件包含這樣的內容:在opencv 1.0中打開yml文件

%YAML:1.0 
Image file: "00961010.jpg" 
Contours count: 8 
Contours: 
    - 
    Name: FO 
    Count: 41 
    Closed: 0 
    Points: 
    - 
     x: 740.7766113281250000 
     y: 853.0124511718750000 
    - 
     x: 745.1353149414062500 
     y: 875.5324096679687500 

您能否提供一些如何迭代這些數據的例子?我只需要x,y點,然後存儲在一個數組中。我已經搜索,但我沒有找到類似的數據示例,請幫助我。提前致謝!

回答

0

你會想看看cvFileStorage數據結構和功能。

下面是來自OpenCV的一個例子,讓你開始:

#include "cxcore.h" 

int main(int argc, char** argv) 
{ 
    CvFileStorage* fs = cvOpenFileStorage("points.yml", 0, CV_STORAGE_READ); 
    CvStringHashNode* x_key = cvGetHashedNode(fs, "x", -1, 1); 
    CvStringHashNode* y_key = cvGetHashedNode(fs, "y", -1, 1); 
    CvFileNode* points = cvGetFileNodeByName(fs, 0, "points"); 

    if(CV_NODE_IS_SEQ(points->tag)) 
    { 
     CvSeq* seq = points->data.seq; 
     int i, total = seq->total; 
     CvSeqReader reader; 
     cvStartReadSeq(seq, &reader, 0); 
     for(i = 0; i < total; i++) 
     { 
      CvFileNode* pt = (CvFileNode*)reader.ptr; 

      int x = cvReadIntByName(fs, pt, "x", 0 /* default value */); 
      int y = cvReadIntByName(fs, pt, "y", 0 /* default value */); 

      CV_NEXT_SEQ_ELEM(seq->elem_size, reader); 
      printf("point%d is (x = %d, y = %d)\n", i, x, y); 
     } 
    } 
    cvReleaseFileStorage(&fs); 
    return 0; 
}