在openv 1.0中打开yml文件

Open yml file in opencv 1.0

本文关键字:yml 文件 openv      更新时间:2023-10-16

我有一个yml文件,我想打开文件阅读使用现有的opencv 1.0函数。该文件包含如下内容:

%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点并将它们存储在一个数组中。我已经搜索,但我没有发现类似的数据的例子,请帮助我。提前感谢!

您将需要查看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;
}