找不到嵌套的轮廓
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
。
我正在使用 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
。