2016-10-27 44 views
2

fillConvexPoly関数を使用してマスク内の三角形を塗り潰そうとしています。 しかし、私は次のエラーが発生します。 trOutCroppedIntがそうように定義私はそうなどの関数を呼び出しC++のOpenCV fillConvexPoly関数が例外をスローする

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 

そしてIはベクトルで3点を押し、

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

このエラーを修正する方法r?エラーpoints.checkVector約

+0

[mcve]を投稿してください。これは完璧に私のために、おそらくあなたが表示されていないコードにいくつかの問題があります – Miki

答えて

1

(2、CV_32S)> = 0)

データ型がCV_32S及び寸法は2よりも大きいよりもはるかに複雑である場合、このエラーが発生してもよいです。たとえば、vector<Point2f>のようなすべてのデータ型でこの問題が発生します。私たちは、私たちが絵 enter image description here

以下のような私たちのポイントを決定しなければならないポイント

を決定する画像

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

2.を読む

1ステップとして、以下の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

関連する問題