2011-09-18 5 views
1

У меня есть следующий фрагмент кода:Последовательность прохождения 2D-точек, как аргументы cvFitLine

int count = (int)sizes.size(); 

CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint2D32f), memStorage); 
float line[4]; 

for (int i=0;i<count;i++) { 
    CvPoint2D32f p; 
    p.x = sizes[i]; 
    p.y = depths[i]; 
    cvSeqPush(seq, &p); 
} 

cvFitLine(seq, CV_DIST_L1, 1, 0.001, 0.001, line); 

но этот код генерирует исключение: неподдерживаемый формат или комбинации форматов (последовательность ввода должна состоять из 2d точек или 3d точки) в cvFitLine Где проблема в моем коде? (Я новичок в OpenCV)

ответ

2

Цитируя документации cvCreateSeq относительно первого параметра:

seqFlags - Флаги созданной последовательности. Если последовательность не передается какой-либо функции, работающей с определенным типом последовательностей, значение последовательности может быть установлено равным 0, в противном случае соответствующий тип должен быть выбран из списка предопределенных типов последовательностей.

И глядя на cvFitLine:

точек - последовательность или массив из 2D или 3D точек с 32-разрядным целым числом или с плавающей точкой координат

Таким образом, вы должны указать тип пунктов добавленных к seqeuence.

CvSeq* seq = cvCreateSeq(CV_32FC2, sizeof(CvSeq), sizeof(CvPoint2D32f), memStorage); 

Необходимо сделать трюк.

+0

благодарит много :) это работает – haynar