下學習OpenCV中給出德洛內三角,我有一些麻煩理解這個片段負責繪圖的鑲嵌的最後一塊,這裏draw_subdiv_facet被饋送一個voroni邊緣同時怎麼做cvpolylines工作
static void draw_subdiv_facet(IplImage* img, CvSubdiv2DEdge edge)
{
CvSubdiv2DEdge t = edge;
int i, count = 0;
//cvpoint structure
//param x: x-coordinate of the point.
//param y: y-coordinate of the point.
//param point: the point to convert.
CvPoint* buf = 0;
// count number of edges in facet
do
{
count++;
t = cvSubdiv2DGetEdge(t, CV_NEXT_AROUND_LEFT);
} while (t != edge);
cout<<"\ncount is : "<<count<<endl;
//allocate the array
buf = (CvPoint*)malloc(count * sizeof(buf[0]));
// gather points
t = edge;
for(i = 0; i < count; i++)
{
//
CvSubdiv2DPoint* pt = cvSubdiv2DEdgeOrg(t);
if(!pt) break;
buf[i] = cvPoint(cvRound(pt->pt.x), cvRound(pt->pt.y));
cout<<"pt.x is : "<<cvRound(pt->pt.x);
cout<<" pt.y is : "<<cvRound(pt->pt.y)<<endl;
cout<<"converted to cvPoint gives"<<buf[i].x<<" , "<<buf[i].y<<endl;
t = cvSubdiv2DGetEdge(t, CV_NEXT_AROUND_LEFT);
}
if(i == count)
{
CvSubdiv2DPoint* pt = cvSubdiv2DEdgeDst(cvSubdiv2DRotateEdge(edge, 1));
//cvFillConvexPoly(img, buf, count, CV_RGB(rand()&255,rand()&255,rand()&255), CV_AA, 0);
CvPoint xx = buf[0];
cout<<"located at "<<xx.x<<","<<xx.y<<endl;
cvPolyLine(img, &buf, &count, 1, 1, CV_RGB(0,0,0), 1, CV_AA, 0);
draw_subdiv_point(img, pt->pt, CV_RGB(0,0,0));
}
free(buf);
}
這是負責繪製線條和多邊形着色,你可以看到,但由COUT被輸出的點比窗口本身大得多,即畫布是
CvRect rect = { 0, 0, 600, 600 };
img = cvCreateImage(cvSize(rect.width,rect.height), 8, 3);
的點是大約是-10 00或更多,那麼它仍然如何繪製點。