Détection de différents composants:
Si vous essayez de détecter les différents composants, il existe probablement d'autres approches pour les faire que la détection des contours. Voici un exemple dans Mathematica. Une érosion suivie d'une dilatation est utilisée pour combler l'écart dans le deuxième composant avant la détection (si vous ne le faites pas, il ne le détectera pas).
img = Binarize@Import["http://i.stack.imgur.com/yqDyu.png"];
Colorize[MorphologicalComponents[Dilation[Erosion[img,1],1]]]
La figure de gauche ci-dessous montre une détection d'objet imparfaite (sans combler l'écart) et à droite, la détection correcte (en exécutant le code ci-dessus).
Détection des différents contours:
Cependant, si vous souhaitez en effet ne séparer que les contours, voici un exemple. L'érosion et la dilatation sont effectuées comme précédemment pour combler l'écart et l'image résultante est passée à travers un détecteur de bord Canny. J'ai explicité les options par défaut, afin que vous puissiez voir ce qui est utilisé.
img2 = EdgeDetect[Dilation[Erosion[img, 1], 1], Method -> "Canny"]
Cela vous donnera à la fois le bord intérieur et extérieur (voir la figure à gauche ci-dessous), car la largeur de pixel est supérieure à 1 tout autour. Je n'ai pas eu beaucoup de chance pour essayer de l'amincir, car les performances se dégradent (peuvent être différentes pour vos autres images). Les contours intérieurs sont ceux que vous voulez, et le contour extérieur n'est que le contour combiné des 4 composants. Maintenant, tout ce que nous devons faire est de laisser tomber le plus extérieur avec:
SelectComponents[img2, "EnclosingComponentCount", # > 0 &]
ce qui vous donne juste les contours intérieurs (voir en bas à droite). En d'autres termes, il ne sélectionne que les contours qui sont entourés par au moins un autre contour, ce qui disqualifie automatiquement le plus externe. Je ne connais pas l'équivalent de ces commandes / opérations dans openCV.
Notez que les ruptures apparentes dans la figure sont dues à l'enregistrement en jpeg dans une taille plus petite. Cela ne ressemble pas à ça sur mon écran.