Ho riscontrato un problema, cioè, la webcam rileva solo l'ultimo dei colori impostati come range per la maschera, ecco il pezzo di codice interessato:
Codice: Seleziona tutto
mask = cv2.inRange(hsv, lower_red, upper_red)
mask = cv2.inRange(hsv, lower_green, upper_green)
mask = cv2.inRange(hsv, lower_blue, upper_blue)
Come faccio a far mascherare tutti e tre i colori? Grazie per chi mi aiuterà, ecco comunque il codice per intero:
Codice: Seleziona tutto
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
"""
Prende ogni frame, cap.read() ritorna due valori ma ci serve solo il secondo
quindi il primo lo assegniamo a _ che e' una variabile inutile e il secondo a frame
che e' una variabile che useremo
"""
_, frame = cap.read()
# Converte da BGR a HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# definisce il range dei colori in HSV
lower_red = np.array([-10,50,50])
upper_red = np.array([10,255,255])
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
lower_green = np.array([50,50,50])
upper_green = np.array([70,255,255])
# Stabilisce i valori da mascherare
mask = cv2.inRange(hsv, lower_red, upper_red)
mask = cv2.inRange(hsv, lower_green, upper_green)
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Maschera l'immagine originale
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame) # Mostra l'immagine originale
cv2.imshow('mask',mask) # Mostra l'immagine mascherata
cv2.imshow('res',res) # Mostra l'immagine finale
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()