Получение точек полигонов, созданных cvApproxPoly () - PullRequest
2 голосов
/ 30 ноября 2010

У меня есть CvSeq *, содержащий полигоны, созданные путем запуска cvApproxPoly () для CvSeq *, созданного из запуска cvFindContors на ч / б входном изображении. Я хочу получить доступ к CvPoints каждого полигона, возвращенного из CvSeq *. Выполните код следующим образом (контур представляет собой IplImage, содержащий ч / б входное изображение):

//create pointers to store data we're going to be calculating
CvMemStorage* storage = cvCreateMemStorage();
CvSeq* first_contour = NULL;
CvSeq* first_polygon = NULL;

//find the contours (edges) of the silhouette, in terms of pixels.
cvFindContours( &outlines,
                storage,
                &first_contour,
                sizeof(CvContour),
                CV_RETR_LIST );

//convert the pixel contours to line segments in a polygon.
first_polygon = cvApproxPoly(first_contour, 
                             sizeof(CvContour), 
                             storage,
                             CV_POLY_APPROX_DP, 
                             2,
                             1);

Я могу использовать cvDrawContour для рисования многоугольника на изображении, но я хочу перебрать каждую 2D-точку, которая определяет каждый контур. Похоже, что каждый элемент CvSeq * first_polygon содержит набор точек для одного многоугольника (заключенный на основе значения first_polygon-> total; но я не знаю, как получить доступ к отдельным точкам. Помогите, пожалуйста?

Ответы [ 2 ]

5 голосов
/ 28 января 2011

Вы можете использовать cvGetSeqElem для итерации по вершинам многоугольника.squares.c в сэмплах / c реализовал эту вещь.

3 голосов
/ 30 ноября 2010

Решил сам: CvSeq * многомерен. например: cvSeq-> total; является первым измерением (каждый многоугольник), например, cvSeq-> first-> total является вторым измерением (каждая точка многоугольника).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...