2012-07-13 3 views
0

Je viens d'écrire un petit programme qui recherche les contours dans une image binaire colorée seuillée qui est traitée avec canny après seuillage, mais trouve toujours deux contours pour chaque objet dans l'image.OpenCV findContours trouve toujours deux contours pour chaque objet

Dans l'image en bas à droite où sont dessinés les contours trouvés, vous pouvez voir que le plus grand contour est dessiné deux fois avec un léger décalage entre les deux contours. L'image suivante montre une vue détaillée de cette image.

http://img831.imageshack.us/img831/3641/doubleframe2.png

Voici juste le plus grand contour est dessiné deux fois, mais il arrive au hasard pour chaque autre des contours. Je veux juste un contour pour chaque objet, comment puis-je y parvenir? :/

Mise à jour:

La taille du vecteur de contours qui est rempli par la méthode findContours a une taille de 8 où il devrait avoir une taille de seulement 4.

mise à jour 2:

est ici l'image ďentrée du kinect http://img405.imageshack.us/img405/9761/inputimage.jpg pour la couleur Seuil i utilisé l'approche suivante

cv::cvtColor(in, out, CV_BGR2HSV); 
cv::inRange(out, 
      cv::Scalar(25, 131, 97), 
      cv::Scalar(35, 220, 217), 
      out); 

suivie d'une érosion + dilatation avec un élément rect avec une taille de 1.

+0

veuillez fournir le lien pour l'image originale. –

+0

fait. J'ai dû enlever l'image du programme parce que je suis capable de publier seulement 2 liens: /. –

+0

pourquoi êtes-vous allé pour canny avant de trouver des contours? pourquoi ne pas trouver directement les contours sur l'image seuillée? –

Répondre

3

Je pense que le problème est très probablement parce que quand vous trouvez les bords, puis trouver les contours de ces bords, il y a un extérieur limite et limite intérieure pour cela. Ainsi, openCV prend les contours et les dessine.

Quand je calcule ses zones, ils ont très peu de changements d'une valeur d'environ « 3 » (par exemple, le plus grand carré a détecté deux contours avec des zones 9105.5 et 9108.5), qui est le plus susceptible de arriver en raison de la raison que j'ai mentionnée. (Donc, ils sont très difficiles à distinguer)

Le problème peut être résolu si vous trouvez des contours avec la recherche de bords cannelés. à savoir trouver directement les contours de l'image seuillée. Cela vous donnera une réponse plus précise.

Dans le premier cas (après canny), j'ai obtenu 36 contours alors que dans le second cas, j'ai seulement 22 contours. Essayez-le et espérez qu'il résout le problème !!!

+0

Je ne savais pas que je peux utiliser findContours directement sur une image seuillée, fonctionne beaucoup mieux maintenant. Merci! :) –

+0

Bienvenue! Si cela résout votre problème, vous pouvez accepter la réponse et fermer cette session. –

Questions connexes