Я портирую код, который использует OpenCV только для соответствия эллипсу. Я могу переписать его позже, но сейчас мне нужно использовать процедуру OpenCV. Этот код всего несколько строк, но мне пришлось изменить почти все, потому что профиль cvFitEllipse2() изменился.OpenCV эффективно создает последовательность из массива uchar.
Мой проблематичной является следующий: преобразовать массив точки (Пара Uchar) в чем-то я могу кормить cvFitEllipse2() с
я не нашел много образцов кода, и я считаю, что OpenCV плохо документирован (но поскольку я новичок в OpenCV, возможно, это чувство неверно). Во всяком случае вот что я писал:
/* centers is the input uchar array */
CvBox2D box; //output
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* seq = cvCreateSeq(CV_32FC2, sizeof(CvSeq), sizeof(CvPoint2D32f), storage);
for(int h=0; h<mm; ++h)
{
CvPoint2D32f p;
p.x = (float)centers[h].x;
p.y = (float)centers[h].y;
cvSeqPush(seq, &p);
}
// Fits ellipse to current contour.
box = cvFitEllipse2(seq);
Проблема: этот код чертовски медленно по сравнению с исходной.
- Есть ли способ предопределить память, необходимую для seq? (Используя объект CvMemStorage)
- Существуют ли более эффективные (контейнеры проще? Чем CvSeq?
- Могу ли я заменить cvSeqPush на что-то быстрее?
Спасибо большое за помощь!
Вы зависимы от ** opencv **, не так ли? – karlphillip
Любите его! Знаете ли вы трюк с (void *) &? – Sam
Кстати, @karlphillip, похоже, вы так же зависимы, как и я;) – Sam