OpenCv: нарисовать многоугольник с белой заливкой

Я хотел бы нарисовать белый заполненный многоугольник с произвольным углом в черном IplImage. Я знаю, что существует такая функция, как createCircle, но я не могу найти что-то подобное для многоугольников. Я нашел это , но использовать его ужасно, Я имею в виду, что мне не нужно вникать в это только для того, чтобы нарисовать один простой белый многоугольник на черном фоне...!

Пример, который я нашел в документации 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 с углом», который мне нужен?


person CTZStef    schedule 31.01.2012    source источник
comment
Похоже, вы ищете BoxPoints.   -  person Piotr Praszmo    schedule 31.01.2012
comment
Я использую BoxPoints. Вопрос: как мне использовать его с fillPoly??   -  person CTZStef    schedule 31.01.2012


Ответы (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 );

}
person Piotr Praszmo    schedule 31.01.2012
comment
@Banthar Скажите, если у меня есть 4 координаты (x1, y1), (x2, y2), (x3, y3) и (x4, y4), как я могу записать это в виде вектора? Пожалуйста помоги.!! - person Frankenstein; 09.07.2013

Для рисования прямоугольника со сплошной заливкой Используйте толщину в функции рисования == CV_FILLED, которая даст вам прямоугольник со сплошной заливкой, и это верно для любой формы многоугольника.....

cvRectangle (img, cvPoint (x1, y1), cvPoint (x2, y2), CV_RGB (0, 255, 0), CV_FILLED, 8, 0);

person Gauranga    schedule 19.11.2015