Передача последовательности 2D точек в качестве аргументов в cvFitLine - PullRequest
1 голос
/ 18 сентября 2011

У меня есть следующий фрагмент кода:

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)

1 Ответ

2 голосов
/ 18 сентября 2011

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

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

И смотрит на cvFitLine:

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

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

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

Должен сделать свое дело.

...