[Risolto] [Python] [OpenCV] Rilevare colori RGB

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Irith
Prode Principiante
Messaggi: 61
Iscrizione: lunedì 2 marzo 2015, 16:41
Desktop: Unity
Distribuzione: Ubuntu 14.04.2 LTS i686

[Risolto] [Python] [OpenCV] Rilevare colori RGB

Messaggio da Irith »

Salve! Sto usando le OpenCV in Python per rilevare i colori RGB (rosso, verde e blu) attraverso la webcam del mio portatile.
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)
In questo caso l'ultimo colore è il blu! Se io faccessi un rapido taglia e incolla mettendo come ultima riga mask = cv2.inRange(hsv, lower_red, upper_red) allora la webcam rileverebbe solo il rosso (ho già provato)..insomma legge solo l'ultimo mask..perchè?
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()
Ultima modifica di Irith il lunedì 18 maggio 2015, 18:40, modificato 1 volta in totale.
Dio ha inventato la birra per impedire agli uomini di mischia di conquistare il mondo.
Avatar utente
Irith
Prode Principiante
Messaggi: 61
Iscrizione: lunedì 2 marzo 2015, 16:41
Desktop: Unity
Distribuzione: Ubuntu 14.04.2 LTS i686

Re: [Python] [OpenCV] Rilevare colori RGB

Messaggio da Irith »

Ho risolto, anche se adesso al posto di 3 finestre ne ho 7 modificando il codice così

Codice: Seleziona tutto

 # Stabilisce i valori da mascherare
    
    mask = cv2.inRange(hsv, lower_red, upper_red)
    mask2 = cv2.inRange(hsv, lower_green, upper_green)
    mask3 = cv2.inRange(hsv, lower_blue, upper_blue)
    
    # Maschera l'immagine originale
    res = cv2.bitwise_and(frame,frame, mask= mask)
    res2 = cv2.bitwise_and(frame,frame, mask= mask2)
    res3 = cv2.bitwise_and(frame,frame, mask= mask3)
    
    cv2.imshow('frame',frame) # Mostra l'immagine originale
    cv2.imshow('mask',mask) # Mostra l'immagine mascherata
    cv2.imshow('res',res) # Mostra l'immagine finale
    cv2.imshow('mask2',mask2) # Mostra l'immagine mascherata
    cv2.imshow('res2',res2) # Mostra l'immagine finale
    cv2.imshow('mask3',mask3) # Mostra l'immagine mascherata
    cv2.imshow('res3',res3) # Mostra l'immagine finale
Dio ha inventato la birra per impedire agli uomini di mischia di conquistare il mondo.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti