【问题标题】:Can't draw largest contour无法绘制最大轮廓
【发布时间】:2012-10-31 17:02:29
【问题描述】:

我有以下代码来绘制最大的轮廓。但似乎我做错了什么。请指教

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

我在这里做错了什么?

【问题讨论】:

  • 你好,在我看来你可以优化这个。您可以简单地存储最大轮廓的索引,而不是遍历轮廓并将最大轮廓存储在largestContour 中,这样您就不必多次复制轮廓。然后,您可以简单地通过索引访问polyContours 中最大的轮廓......你怎么看?

标签: opencv drawing contour


【解决方案1】:

好的,只针对犯同样错误的人。

我需要 vector&lt;vector&lt;Point&gt;&gt; largestContour; 而不是向量最大轮廓;

并将代码从largestContour = polyContours[i];更改为largestContour.push_back(polyContours[i]);

就是这样。现在我可以提取最大的轮廓了。

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 2015-02-25
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2016-10-21
    相关资源
    最近更新 更多