开发者

Retrieving Points of Polygons created by cvApproxPoly()

开发者 https://www.devze.com 2023-01-27 10:33 出处:网络
I have a CvSeq* containing the polygons created by running cvApproxPoly() on a CvSeq* created from running cvFindContors on a b&w input image.I want to access the CvPoints of each polygon returned

I have a CvSeq* containing the polygons created by running cvApproxPoly() on a CvSeq* created from running cvFindContors on a b&w input image. I want to access the CvPoints of each polygon returned from the CvSeq*.开发者_运维技巧 Code so far as follows (outlines is an IplImage containing the b&w input image):

//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);

I can use cvDrawContour to draw the polygon onto an image, but I want to iterate over each 2D point that defines each contour. It looks like each element of the CvSeq* first_polygon contains the set of points for a single polygon (concluded based on the value of first_polygon->total;, but I don't know how to access the individual points. Help please?


You can use cvGetSeqElem to iterate over the vertices of the polygon. squares.c in samples/c has implemented this thing.


Resolved this myself: CvSeq* is multi-dimensional. e.g: cvSeq->total; is the first dimension (each polygon), eg cvSeq->first->total is the second dimension (each point in a polygon).

0

精彩评论

暂无评论...
验证码 换一张
取 消