2017-06-25 5 views
1

J'utilise la méthode et drawContours() pour trouver les contours dans mon image binaire. Cependant ceci est ma sortie:Impossible de trouver les contours imbriqués

my output

Si je autre seuil mon image tel que le rectangle devient floue, l'intérieur est visible (remarquez les courbes extérieures et intérieures sont fusionnées en bas à gauche):

notice the outer and inner curves are merged at the bottom left

Pouvez-vous expliquer s'il vous plaît ceci et comment le résoudre?

Après est mon extrait de code:

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); 
} 

remarquez que je l'ai enlevé la hiérarchie des contours.

+0

J'ai essayé de changer la méthode d'extraction de contour mais j'ai obtenu la même sortie dans les 4 méthodes de récupération. –

+1

Quelle est votre sortie désirée? – Micka

Répondre

0

Le problème est dans la ligne drawContours(thr, contours,i, color, CV_FILLED, 8, hierarchy);. Passer un paramètre CV_FILLED remplira toute la zone à l'intérieur d'un contour. D'où le rectangle a été rempli. On peut remplacer CV_FILLED par n'importe quel nombre entier positif.