2012-01-31 4 views
0

검정 IplImage에서 임의의 각도로 흰색으로 채워진 다각형을 그려야합니다. createCircle과 같은 함수가 있음을 알고 있지만 폴리곤과 비슷한 것을 찾을 수 없습니다. this을 찾았지만 사용법이 끔찍합니다. 검정 배경에 하나의 간단한 흰색 다각형을 그려야 할 필요는 없습니다 ...!OpenCv : 흰색으로 채워진 다각형을 그립니다.

내가 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); 
} 

, 내 질문은, 어떻게 그것을 밖으로 마스크를 얻기 위해, fillPoly에 CvBox2D를 넣고 마지막으로 각도와 "투자 수익 (ROI)을 설정 할 "내가 필요한거야? 이처럼

+0

[BoxPoints] (http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#boxpoints)를 찾고있는 것처럼 보입니다. –

+0

나는 BoxPoints를 사용합니다. 질문은 fillPoly와 함께 어떻게 사용합니까 ?? – CTZStef

답변

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

} 
+0

대단히 감사합니다. Banthar, 작품 # 1! – CTZStef

+0

@Banthar 4 좌표 (x1, y1), (x2, y2), (x3, y3) 및 (x4, y4)가있는 경우 어떻게 벡터의 형태로 이것을 쓸 수 있습니까? 도와주세요.!! – Frankenstein

1

그리기 기능 == CV_FILLED 고체 채워진 사각형을 사용하여 두께를 그리기 위해 당신에게 단단한 채워진 사각형을 줄 것이다 & 그 어떤 다각형 모양에 대한 사실 .....

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