断言失败错误(-215)与contourArea()c ++ OpenCV 2.3.1

时间:2014-01-22 23:19:12

标签: c++ opencv

我想按区域过滤图像(网络摄像头)的轮廓。我使用findContours(),然后使用approxPolyDP()将它们转换为闭合多边形。之后我想用它的区域过滤它们(一个用“有用”轮廓生成另一个结构的函数)用这个函数:

std::vector<vector<Point> > _filterByArea(double minArea,double maxArea,const std::vector<vector<Point> > contours){
    size_t ncontours=contours.size();
    size_t useful_contours=0;
    size_t i,j;
    double area;
    std::vector<vector<Point> > filtered_contours;


    for(i=0;i<ncontours;i++){
        area=contourArea(contours[i],false);
        if(area>minArea && area<maxArea){
            useful_contours++;
        }
    }    
    filtered_contours.resize(useful_contours);

    useful_contours=0;
    for(i=0;i<ncontours;i++){
        double area=contourArea(contours[i],false);
        size_t contour_size=contours[i].size();
        if(area>minArea && area<maxArea){
            for(j=0;j<contour_size;j++){
                    //filtered_contours[useful_contours].resize(contour_size);
                    filtered_contours.at(useful_contours).push_back(contours.at(i).at(j));
                    //filtered_contours.insert(filtered_contours.begin(),contours.at(i).begin(),contours.at(i));
            }
            useful_contours++;
        }
    }

    return filtered_contours;

}

但是在运行它时崩溃并出现以下错误:

OpenCV错误:断言失败(contour.checkVector(2)&gt; = 0&amp;&amp;(contour.depth()== CV_32F || contour.depth()== CV_32S))在contourArea,file / tmp中/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp,第1673行 在抛出'cv :: Exception'的实例后终止调用   what():/ tmp/buildd/opencv-2.3.1/modules/imgproc/src/contours.cpp:1673:错误:(-215)contour.checkVector(2)&gt; = 0&amp;&amp;函数contourArea中的(contour.depth()== CV_32F || contour.depth()== CV_32S)

尝试不同的东西和代码我发现错误在行区域= contourArea(contours [i],false);,这对我来说非常明显但不是很明显,因为我尝试了类似的(同样的() )之前的代码(但不是在函数中,而是在main()中),它完美地工作。我做错了什么?

提前致谢!

0 个答案:

没有答案