OpenCV: drawContours()断言失败

OpenCV: Assertion failed with drawContours()

本文关键字:断言 失败 drawContours OpenCV      更新时间:2023-10-16

我正在尝试从图像中绘制轮廓。我从我的网络摄像头中获取了一个框架,提取了它的轮廓。然后,我按区域过滤它们,并调用drawContours()来显示它们。问题是,当我试图绘制过滤轮廓时……如果我画原始的,一切都没问题。下面是代码:

    size_t contours_size=contours.size();
    bool contour_is_valid[contours_size];
    size_t filtered_contours=0;
    size_t copied_contours=0;
    size_t i;
    double area;
    for(i=0;i<contours_size;i++){
        area=contourArea(contours.at(i),false);
        if(area>minArea && area<maxArea){
            contour_is_valid[i]=true;
            filtered_contours++;
        }
        else{
            contour_is_valid[i]=false;
        }
    }
    area_filtered_contours.resize(filtered_contours);
    for(i=0;i<contours_size;i++){
    if(contour_is_valid[i]==true){
            area_filtered_contours.at(copied_contours).resize(contours.at(i).size());
            copy(contours.at(i).begin(),contours.at(i).end(),back_inserter(area_filtered_contours.at(copied_contours)));
            copied_contours++;
        }
    }

contours是findContours()的输出,因此,它是一个向量<向量&>>数据等于area_filtered_contours。我想做的是生成另一个结构,像这样,在面积上有有用的轮廓。

drawContours(cnt_img2,contours,_levels <= 0 ? 3 : -1, 255,1,8,hierarchy, std::abs(_levels) );

可以,但是

drawContours(cnt_img2,area_filtered_contours,_levels <= 0 ? 3 : -1, 255,1,8,hierarchy, std::abs(_levels) );

给我一个断言错误。有什么问题吗?

提前感谢,

费德里科•

正如您的断言所说:OpenCV错误:断言失败(hierarchy.total() == ncontours &&hierarchy.type() == CV_32SC4)

关于findContours() (opencv.org)的层次结构的信息:可选的输出向量,包含有关图像拓扑的信息。它的元素和轮廓的数量一样多。

当您更改计数时,还必须编辑层次结构。这是一个可选的输入。把这个也编辑一下,否则不要用