我有一个CvSeq *,其中包含通过在b& w输入图像上运行cvFindContors创建的CvSeq *上运行cvApproxPoly()而创建的多边形。我想访问从CvSeq *返回的每个多边形的CvPoints。代码到目前为止(轮廓是包含b& w输入图像的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;的值得出结论;但我不知道如何访问各个点。请帮助吗?< / p>
答案 0 :(得分:5)
您可以使用cvGetSeqElem迭代多边形的顶点。 samples / c中的squares.c实现了这一点。
答案 1 :(得分:3)
我自己解决了这个问题:CvSeq *是多维的。例如:cvSeq->总;是第一个维度(每个多边形),例如cvSeq-&gt; first-&gt; total是第二个维度(多边形中的每个点)。