2015-04-01 2 views
1

J'utilise floodFill sur mon application android. La fonction d'inondation Opencv modifie l'image d'entrée du masque. J'ai lu cette utilisation de la fonction here. La documentation indique queOpencv floodFill: Comment puis-je transformer les coordonnées de l'image en masque?

Masque d'opération qui doit être une image 8 bits monocanal, 2 pixels plus large et 2 pixels plus grand que l'image.

et

Note: Etant donné que le masque est plus grand que l'image remplie, un pixel (x, y) dans l'image correspondant au pixel (x + 1, y + 1) dans le masque .

Mais je pense que si je veux accéder (x, y), j'utilise (x + 2, y + 2). Ai-je tort?

Répondre

1

Vous devriez faire confiance à la documentation! (Bien, la plupart du temps ... :-)

Le masque est plus large de 2 pixels et plus grand que l'image d'entrée, mais une bande de pixels est utilisée en haut/à gauche de l'image, et l'autre en bas/droite de l'image.

Comme vous le dites correctement, pendant le remplissage, toutes les coordonnées d'entréeImage sont traduites pour masquer les coordonnées en sommant (1,1).

Par exemple, en atteignant un point quelconque sur le bord gauche de l'image située au point de coordonnées x = 0, y = y0, l'algorithme vérifie dans le masque 8 points centrés autour des coordonnées x = 1, y = y0 + 1, qui comprend le point x = 0, y = y0 + 1 (immédiatement à gauche) . Si vous n'aviez pas la somme 1, vous quitteriez les limites de l'image.

En atteignant le bord droit de l'image située au point de coordonnées x = inputImage.cols -1, y = y0, l'algorithme va vérifier dans le masque 8 points centrés autour des coordonnées x = inputImage.cols, y = y0 + 1, qui comprend le point x = inputImage.cols + 1, y = y0 + 1 (immédiatement à droite). Si votre masque n'est pas plus large de 2 pixels que l'image d'origine, vous quitterez les limites de l'image. C'est pourquoi vous avez besoin d'une image de masque de 2 pixels plus large que l'image d'entrée, tout en additionnant (1,1) pour transformer les coordonnées de l'image en masque. Toutes ces considérations valent bien sûr pour la coordonnée y, pour expliquer pourquoi le masque doit être supérieur de 2 pixels à l'image d'entrée.

Remarque: les considérations sont les mêmes si vous utilisez un voisinage 4 au lieu d'un voisinage 8.

+0

merci pour votre explication. – zumma

+0

@holazollil Si vous êtes satisfait de ma réponse, veuillez vérifier [comment l'accepter] (http://meta.stackexchange.com/a/5235/225842). – Antonio