2017-10-13 5 views
0

Je souhaite calculer l'histogramme de l'image. Je dois utiliser un masque. Mon masque devrait ressembler à l'image en noir et blanc? Noir pour ignorer l'espace, et blanc pour calculer?Masque d'histogramme OpenCV

Pour créer un masque. Je remplace mes pixels blancs (R> 220 & G> 220 & B> 220) par du noir, d'autres par du blanc.

Est-ce que je le fais bien?

+1

Votre compréhension générale d'un masque est correct. Votre méthode serait correcte si ce que vous essayez de faire est de calculer l'histogramme de tous les pixels qui ont des valeurs inférieures à 220. –

Répondre

2

Votre solution pour créer un masque est correcte, si vous voulez calculer l'histogramme sur les parties de l'image que la valeur des pixels est inférieure à 220 sur chaque canal. Veillez également à ne pas remplacer les pixels de votre image d'origine. Juste faire un seul canal cv::Mat, qui est la même hauteur et largeur que l'image originale. Ensuite, remplissez ses pixels en fonction de l'image originale. Vous pouvez également faire un tel masque en utilisant la fonction cv::inRange:

cv::MAT mask; 
// make inverted mask in order to avoid masking pure red, green or blue 
cv::inRange(original_image, cv::Scalar(220, 220, 220), cv::Scalar(255, 255, 255), mask); 
// make non-inverted mask 
mask = 255 - mask; 
+0

Si vous codez de cette façon, vous pouvez masquer des pixels avec des valeurs comme '(0, 0, 255) ', qui ne sont pas blancs. cela arrivera parce que la logique dans 'cv :: inRange' est AND. – Soroush

+0

C'est exactement ce que fait le code. Il a mentionné qu'il est à la recherche de pixels blancs, donc nous devons les trouver en premier, mais il veut qu'ils soient masqués afin que nous inversions masque précédent. Regardez cette image: https://photos.app.goo.gl/dNLz8pdeIa4fkK5B2 En utilisant '(0-220,0-220,0-220)' bound: https://photos.app.goo .gl/HvNkQ0XfynRnzsIv2 – Soroush

+0

Je vois maintenant, merci de prendre le temps --- ne réalisait pas OP voulait un masque inversé. Je vais supprimer mes commentaires. –