2010-11-30 4 views
2

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

//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 ;, но я не знаю, как получить доступ к отдельным точкам. Помогите пожалуйста?

ответ

5

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

+0

можете ли вы сказать, является ли этот метод доступен в javacv, а? – 2012-06-21 00:34:50

3

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

Смежные вопросы