C++ contourArea()c+;的断言失败错误(-215)+;OpenCV 2.3.1

C++ contourArea()c+;的断言失败错误(-215)+;OpenCV 2.3.1,c++,opencv,C++,Opencv,我想过滤轮廓的图像(网络摄像头)的面积。我使用findContours(),然后使用approxPolyDP()将它们转换为闭合多边形。在此之后,我想使用此函数按面积(生成具有“有用”轮廓的另一个结构的函数)对其进行过滤: std::vector<vector<Point> > _filterByArea(double minArea,double maxArea,const std::vector<vector<Point> > contours

我想过滤轮廓的图像(网络摄像头)的面积。我使用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;
std::vector\u filterByArea(双minArea,双maxArea,常数std::vector等高线){
size_t=等高线。size();
有用轮廓的大小=0;
尺寸i,j;
双区;
std::矢量滤波的_轮廓;

对于(i=0;iminArea&&Area)我没问题。我使用的是OpenCV 3.3。也许你应该知道,你的
轮廓线不正确,或者是一个固定的错误。