OpenCv:绘制一个白色填充多边形

时间:2012-01-31 15:31:43

标签: opencv roi

我想在黑色IplImage中绘制一个白色填充多边形,任意角度。我知道存在诸如createCircle之类的函数,但我找不到类似于多边形的东西。 我找到了this,但使用它很糟糕,我的意思是我不应该只是为了在黑色背景上绘制一个简单的白色多边形......!

我在OpenCV文档中找到的示例:

void MyPolygon( Mat img )
{
   int lineType = 8;

   /** Create some points */
   Point rook_points[1][20];
   rook_points[0][0] = Point( w/4.0, 7*w/8.0 );
   rook_points[0][1] = Point( 3*w/4.0, 7*w/8.0 );
   rook_points[0][2] = Point( 3*w/4.0, 13*w/16.0 );
   rook_poi /*** blablabla **/
   rook_points[0][19] = Point( w/4.0, 13*w/16.0) ;

   const Point* ppt[1] = { rook_points[0] };
   int npt[] = { 20 };

   fillPoly( img,
             ppt,
             npt,
             1,
             Scalar( 255, 255, 255 ),
             lineType );
 }

基本上,我的问题是,如何将一个CvBox2D放入fillPoly,从中获取一个掩码,最后设置" ROI为角度"我需要什么?

2 个答案:

答案 0 :(得分:2)

像这样:

#include <cv.h>

void drawBox( CvArr* img, CvBox2D box, CvScalar color )
{

    CvPoint2D32f pointsf[4];
    cvBoxPoints( box , pointsf );

    CvPoint pointsi[4];

    for(int i=0;i<4;i++)
    {
        pointsi[i]=cvPointFrom32f(pointsf[i]);
    }

    CvPoint* countours[1]={
        pointsi,
    };

    int countours_n[1]={
        4,      
    };

    cvFillPoly( img, countours, countours_n, 1, color );

}

答案 1 :(得分:1)

用于绘制实心填充矩形在绘制函数中使用厚度== CV_FILLED将为您提供实心填充矩形&amp;它适用于任何多边形形状.....

cvRectangle(IMG,             cvPoint(x1,y1),             cvPoint(X2,Y2),             CV_RGB(0,255,0),CV_FILLED,8,0);