Trouver la couleur rouge en utilisant Python & amp; OpenCV
Je suis en train d'extraire la couleur rouge à partir d'une image. J'ai un code qui s'applique seuil à ne laisser que les valeurs de la plage spécifiée:
img=cv2.imread('img.bmp')
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,50,50]) #example value
upper_red = np.array([10,255,255]) #example value
mask = cv2.inRange(img_hsv, lower_red, upper_red)
img_result = cv2.bitwise_and(img, img, mask=mask)
Mais, comme je l'ai vérifié, le rouge peut avoir la valeur de la Teinte dans la gamme de 0 à 10, ainsi que dans la gamme de 170 à 180. Donc, je voudrais laisser les valeurs à partir de ces deux gammes. J'ai essayé de réglage du seuil de 10 à 170 et à l'aide de cv2.bitwise_not fonction, mais puis-je récupérer la couleur blanche. Je pense que la meilleure option serait de créer un masque pour chaque gamme et de les utiliser tous les deux, donc j'ai en quelque sorte à se joindre à eux avant de continuer.
Est-il une manière que je pourrais joindre deux masques à l'aide d'OpenCV? Ou est-il un autre moyen que je pouvais atteindre mon objectif?
Modifier. Je suis venu avec pas beaucoup élégant, mais la solution de travail:
image_result = np.zeros((image_height,image_width,3),np.uint8)
for i in range(image_height): #those are set elsewhere
for j in range(image_width): #those are set elsewhere
if img_hsv[i][j][1]>=50 \
and img_hsv[i][j][2]>=50 \
and (img_hsv[i][j][0] <= 10 or img_hsv[i][j][0]>=170):
image_result[i][j]=img_hsv[i][j]
Assez satisfait mes besoins, et les fonctions d'OpenCV probablement faire à peu près la même, mais si il y a une meilleure façon de le faire(à l'aide de certains fonction dédiée et écrire moins de code) s'il vous plaît le partager avec moi. 🙂
source d'informationauteur yolo77 | 2015-05-19
Vous devez vous connecter pour publier un commentaire.
Je voudrais simplement ajouter les masques ensemble, et l'utilisation
np.where
pour masquer l'image d'origine.Cela devrait être beaucoup plus rapide et beaucoup plus lisible qu'en parcourant chaque pixel de votre image.