1

最大の輪郭を描画する次のコードがあります。しかし、私が間違っていることがあるようです。ご意見をお聞かせください

if(inputImage.data == NULL)
        return HandInfo2();
        Mat outputImage =  Mat::zeros( inputImage.size(), CV_8UC1);
        vector<vector<Point> > contours;
        vector<Vec4i> hierarchy;
        vector<Point> largestContour;
        int largestArea = -1;

    findContours( inputImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

    /// Approximate contours to polygons
    vector<vector<Point> > polyContours( contours.size() );
    
    for( int i = 0; i < contours.size(); i++ )
    { 
        approxPolyDP( Mat(contours[i]), polyContours[i], 3, true );
    }

    for( int i = 0; i < contours.size(); i++ )
    { 
        int area = fabs(contourArea(polyContours[i],false));
        if(area > largestArea && area > size)
        {
            largestArea = area;
            largestContour = polyContours[i];
        }   
    }

    Scalar color = Scalar( 255 );

    if(largestContour.size()>0)
    drawContours( outputImage, largestContour, 0, color, 1, 8, vector<Vec4i>(), 0, Point() );    

drawContours() が呼び出されると、次のエラーが発生します

OpenCV エラー: 不明な関数でアサーションが失敗しました (i < 0)、ファイル ..\..\..\src\opencv\modules\core\src\matrix.cpp、行 957

エラー

ここで何が間違っていますか?

4

1 に答える 1

0

わかりました、同じ間違いをする人のために。

vector<vector<Point>> largestContour;vector maximumContour; の代わりにa が必要でした。

そして、コードを からlargestContour = polyContours[i];に変更しましたlargestContour.push_back(polyContours[i]);

それだけでした。これで、最大の輪郭を抽出できます。

于 2012-11-01T07:36:11.093 に答える