2016-10-27 18 views
2

fillConvexPoly 함수를 사용하여 마스크에서 삼각형을 채우려고합니다. 하지만 다음과 같은 오류가 발생합니다. trOutCroppedInt 그래서 같이 정의 I 너무 등과 같은 함수를 호출C++의 OpenCV fillConvexPoly 함수가 예외를 throw합니다.

OpenCV Error: Assertion failed (points.checkVector(2, CV_32S) >= 0) in fillConvexPoly, file /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp, line 2256 
terminate called after throwing an instance of 'cv::Exception' 
what(): /home/iris/Downloads/opencv-3.1.0/modules/imgproc/src/drawing.cpp:2256: error: (-215) points.checkVector(2, CV_32S) >= 0 in function fillConvexPoly 

,

cv::Mat mask = cv::Mat::zeros(r2.size(), CV_32FC3); 
cv::fillConvexPoly(mask, trOutCroppedInt, cv::Scalar(1.0, 1.0, 1.0), 16, 0); 

,

std::vector<cv::Point> trOutCroppedInt 

그리고이 벡터에 3 점 푸시

[83, 46; 0, 48; 39, 0] 

이 오류를 어떻게 수정해야합니까? 아르 자형? 오류 points.checkVector (2 CV_32S)> = 약

+0

[mcve]를 게시하십시오. 이것은 나를 위해 완벽하게 작동합니다, 아마 당신은 코드에 어떤 문제가 있습니다. – Miki

답변

1

데이터 형식 CV_32S보다 훨씬 복잡하고 측정이 두보다 클 때 0)

오류가 발생할 수있다. 예를 들어 vector<Point2f>과 같은 모든 데이터 유형은이 문제를 만듭니다. 아래

1 단계로 우리는 우리가 사진 enter image description here

아래와 같이 우리의 사항을 결정해야합니다

cv::Mat src=cv::imread("what/ever/directory"); 

2 포인트

을 결정 이미지를 읽어 fillConvexpoly을 사용할 수 있습니다 이 점에 대한 코드는

입니다.

우리의 이미지가 src 것을 가정하고 우리는이 이미지에() 점 이전에() 다각형을 그리려는 10

vector<cv::Point> point; 
point.push_back(Point(183,146)); //point1 
point.push_back(Point(100,148)); //point2 
point.push_back(Point(100,110)); //point3 
point.push_back(Point(139,110)); //point4 

기능 cv::fillConvexPoly 3.Use 다음 우리의 코드가 될 것입니다

cv::fillConvexPoly(src,    //Image to be drawn on 
        point,     //C-Style array of points 
        Scalar(255,0,0), //Color , BGR form 
        CV_AA,    // connectedness, 4 or 8 
        0);   // Bits of radius to treat as fraction 

때문에 출력 영상은 다음과 같다 (전 : 왼쪽 - 오른쪽 후)

enter image description here

,536을
관련 문제