2012-07-04 10 views
4

J'essaie actuellement de récupérer tous les pixels noirs présents dans la limite du contour. Je ne suis pas intéressé par la limite du contour, mais plutôt par les pixels noirs qui se trouvent à l'intérieur de la limite et qui constituent l'image réelle. Ce serait génial si je pouvais obtenir les coordonnées réelles de l'image.OpenCV obtient des pixels noirs à l'intérieur du contour

J'ai essayé d'utiliser la méthode copyTo en utilisant un masque, mais je ne suis pas en train de régler les paramètres corrects. Tandis que, j'ai également essayé d'employer Core.fillPoly qui remplit juste la zone entière de contour avec la couleur spécifiée dans la commande et il n'est pas utile d'obtenir l'information de pixel. Quelqu'un pourrait-il me guider ici? Je travaille sur Android 2.2 avec OpenCV 2.3.1.

Répondre

4

Il existe un ensemble de pixels compris dans les limites du contour. Il existe un autre ensemble de pixels qui sont noirs. Vous voulez trouver l'intersection de ces deux ensembles, c'est-à-dire l'ensemble des pixels qui sont à la fois dans la limite et sont de couleur noire.

Pour ce faire, je le ferais:

  1. Dessiner le contour comme une forme pleine, blanc sur noir (dans sa propre image) de sorte qu'il est un masque. Vous pouvez utiliser cv::drawContours ou cv::fillPoly.

  2. Filtrer les pixels noirs de l'image comme un autre masque. Vous pouvez utiliser cv::threshold avec THRESH_BINARY_INV et une valeur de seuil de zéro.

  3. Trouver l'ensemble intersection en utilisant bitwise_and ou simplement l'opérateur & comme matResult = mat1 & mat2;

Le résultat est une matrice de la même taille que l'image avec des valeurs non nulles uniquement pour les pixels qui répondent à vos critères d'être dans le contour et noir dans l'image. Vous pouvez obtenir les coordonnées individuelles en bouclant cette matrice et en testant des valeurs non nulles.

+0

Merci Brian, c'est prometteur. Je vais l'essayer et vous le faire savoir. –

+0

Hey Brain, c'est le morceau de code que j'ai implémenté, qui semble fonctionner dès maintenant comme testé sur l'émulateur Android. Mais lorsque j'essaie de convertir la matrice finale en un ensemble de vecteurs, l'application plante. Je suis en train de le convertir afin que je puisse voir les pixels non-zéro que le Mat contient. Veuillez nous conseiller Il échoue sur cette ligne - 'Converters.Mat_to_vector_Point (finalResult, points);' J'ai obtenu le tapis final avec cette commande - 'Core.bitwise_and (mGrayC4, contourRegion, finalResult); ' –

+0

Je suppose que vous avez initialisé les' points' liste? Vous pourriez essayer de vérifier les matrices intermédiaires pour vérifier qu'elles tiennent ce que vous attendez. Sinon, il est difficile pour moi de savoir quel est le problème sans voir plus de votre code. –

Questions connexes