Не удается найти вложенные контуры

Я использую методы 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);
}

Обратите внимание, что я удалил иерархию контуров.


person Krishna Chouthankar    schedule 25.06.2017    source источник
comment
Я попытался изменить метод извлечения контура, но получил одинаковый результат во всех 4 методах извлечения.   -  person Krishna Chouthankar    schedule 26.06.2017
comment
каков ваш желаемый результат?   -  person Micka    schedule 26.06.2017


Ответы (1)


Проблема в строке drawContours(thr, contours,i, color, CV_FILLED, 8, hierarchy );. Передача параметра CV_FILLED заполнит всю область внутри контура. Следовательно, прямоугольник был заполнен. Можно заменить CV_FILLED любым положительным целым числом.

person Krishna Chouthankar    schedule 26.06.2017