我想按区域过滤图像(网络摄像头)的轮廓 . 我使用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错误:在contourArea,file /tmp/buildd/opencv-2.3中断言失败(contour.checkVector(2)> = 0 &&(contour.depth()== CV_32F || contour.depth()== CV_32S)) . 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)> = 0 &&(contour.depth()== CV_32F || contour.depth()== CV_32S)在函数contourArea中

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

提前致谢!