找不到嵌套的轮廓

Cannot find nested contours

我正在使用 findContours()drawContours() 方法在我的二进制图像中查找轮廓。然而这是我的输出:

如果我进一步对我的图像进行阈值处理,例如矩形变得模糊,则内部是可见的(注意外部和内部曲线在左下角合并):

你能解释一下这个问题以及如何解决吗?

以下是我的代码片段:

void cb_thresh(int,void*)
{vector< vector<Point> > contours; 

vector<Vec4i> hierarchy;
threshold(src, thr,threshval, 255,THRESH_BINARY);
namedWindow("threshold",CV_WINDOW_NORMAL);
imshow("threshold",thr);
findContours( thr, contours, hierarchy,CV_RETR_LIST, CV_CHAIN_APPROX_NONE ); // Find the contours in the image

Scalar color( 255,255,255);

for( int i = 0; i< contours.size(); i++ ) // iterate through each contour

{
drawContours(thr, contours,i, color, CV_FILLED, 8, hierarchy );
}
namedWindow("dst",CV_WINDOW_NORMAL);
imshow("dst",thr);
}

请注意我已经删除了等高线的层次结构。

问题出在 drawContours(thr, contours,i, color, CV_FILLED, 8, hierarchy ); 行。传递参数 CV_FILLED 将填充轮廓内的整个区域。因此矩形被填充。可以用任何正整数替换 CV_FILLED