#c #opencv
#c #opencv
Вопрос:
У меня есть файл 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 и сохранить их в массиве. Я искал, но не нашел похожего примера данных и, пожалуйста, помогите мне. Заранее спасибо!
Ответ №1:
Вы захотите взглянуть на структуры и функции 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, amp;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( amp;fs );
return 0;
}