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