Sácame as cores!
- Duración:
- 50 min
- Agrupamento:
- 2
Ides segmentar unha imaxe en tres cores verde, azul e vermello. Definir rangos para tres cores: vermello, verde e azul. (Nota sobre o vermello: Como o vermello aparece ao comezo e ao final do círculo de cores do espazo HSV, usaredes dous rangos e logo unirédelos.) Crearedes unha máscara para cada cor e extraeredes (segmentaredes) a parte da imaxe que ten esa cor. Por último, mostraredes a imaxe orixinal e logo as imaxes segmentadas para a cor vermella, o verde e o azul.
A segmentación de cores é unha técnica que "separa" ou "resalta" as partes dunha imaxe que teñen unha cor determinada, o que é moi útil en moitos sistemas de Intelixencia Artificial (IA) para identificar obxectos, recoñecer patróns ou illar elementos importantes dunha escena.
Tarefa 1: Segmentación en verde
Realiza un programa que...
- Permita subir esta imaxe desde o computador con imaxe = cv2.imread(arquivo)
- Convirta a imaxe de BGR (o formato en que OpenCV le as imaxes) a HSV, un sistema de cores que nos facilita traballar con rangos de cor con hsv = cv2.cvtColor(imaxe, cv2.COLOR_BGR2HSV)
- Según os rangos para o verde no espazo de cor HSV, segmenta a cor verde con:
#Segmentación da cor VERDE
verde_inferior = np.array([36, 25, 25]) #Selecciona pixeles do array da imaxe verdes claros
verde_superior = np.array([70, 255, 255]) #Selecciona pixeles do array da imaxe verdes oscuros
mascara_verde = cv2.inRange(hsv, verde_inferior, verde_superior)
segmento_verde = cv2.bitwise_and(imaxe, imaxe, mask=mascara_verde) - Mostrar a imaxe inicial e a segmentada con:
# Mostrar a imaxe orixinal e a imaxe segmentada.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
Tarefa 2 : Segmentación en azul
- Sabendo que para o azul os límites inferiores poden ser en torno a [94, 80, 2] e os superiores en torno a [126, 255, 255] engade á anterior, unha segmentación en azul
- Mostrar a imaxe inicial e as 2 segmentadas con:
# Mostrar a imaxe orixinal e a imaxe segmentada.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
print("Segmentación da cor azul:")
cv2_imshow(segmento_azul)
Tarefa 3 : Segmentación en vermello
- O vermello ten 2 rangos(é o principio e o final do círculo HVS) en lugar de 1, por iso é preciso realizar 2 máscaras e logo sumalas antes de facer a segmentación
- Sabendo que para o vermelloinicial os límites inferiores poden ser en torno a [0, 120, 70] e os superiores en torno a [[10, 255, 255] engade á anterior, e para o vermellofinal son [170, 120, 70])
e [180, 255, 255] realiza unha máscara para cada unha do mesmo xeito que fixeches a do verde e azul. - Súmaas con:
mascara_vermella = mascara_vermellainicial + mascara_vermellafinal
segmento_vermello = cv2.bitwise_and(imaxe, imaxe, mask=mascara_vermella) - Mostra a imaxe inicial e as 3 segmentadas con:
# Mostrar a imaxe orixinal e a imaxe segmentada.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)
print("Segmentación da cor vermella:")
cv2_imshow(segmento_vermello)
print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
Lembra:A IA está para axudarche, pregúntalle!
Exemplo de resultado esperado
Os números utilizados para os rangos de azul, verde e vermello no espazo de cores HSV (Hue, Saturation, Value) corresponden ás características específicas desas cores no círculo cromático.
Aquí está unha breve explicación:
Vermello: O matiz (Hue) do vermello aparece en dous extremos do círculo cromático, en torno a 0°-10° e 170°-180°, por iso os rangos están divididos en dúas partes. Esta separación permite capturar con precisión todas as tonalidades do vermello.
Por exemplo, os valores [0, 120, 70] representan os límites inferiores de brillo e saturación para o vermello, e os valores [10, 255, 255] marcan os máximos.
Verde: O verde sitúase aproximadamente entre 36°-70° no círculo HSV. Este rango cobre dende verdes máis apagados ata verdes vivos e saturados.
Os valores [36, 25, 25] inclúen verdes menos saturados e escuros, mentres que [70, 255, 255] abarca os verdes máis intensos e brillantes.
Azul: O azul ocupa o rango entre 94°-126° no espazo HSV, o que permite segmentar tons de azul que abranguen dende azuis claros ata escuros.
Por exemplo, [94, 80, 2] permite captar azuis apagados ou pouco saturados, mentres que [126, 255, 255] inclúe azuis vibrantes e claros.
Estas eleccións aseguran que os rangos capturen as tonalidades máis características de cada cor no espazo HSV, reflectindo como os humanos perciben os matices.
Tarefa 1
Código Python: Segmentación en verde
import cv2
import numpy as np
from google.colab import files
from google.colab.patches import cv2_imshow
# 1. Subir a imaxe desde o ordenador
# Abrirase unha ventá para que selecciones a imaxe.
subida = files.upload()
for arquivo in subida.keys():
imaxe = cv2.imread(arquivo)
# 2. Converter a imaxe de BGR a HSV.
# O espazo HSV (Hue, Saturation, Value) axuda a definir rangos de cores de forma máis natural.
hsv = cv2.cvtColor(imaxe, cv2.COLOR_BGR2HSV)
# 3. Definir os rangos de cores en HSV e segmentar cada cor.
## Segmentación da cor VERDE
verde_inferior = np.array([36, 25, 25])
verde_superior = np.array([70, 255, 255])
mascara_verde = cv2.inRange(hsv, verde_inferior, verde_superior)
segmento_verde = cv2.bitwise_and(imaxe, imaxe, mask=mascara_verde)
# 4. Mostrar a imaxe orixinal e a imaxe segmentada.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)
print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
Tarefa 2
Código Python: Segmentación en verde e azul
import cv2
import numpy as np
from google.colab import files
from google.colab.patches import cv2_imshow
# 1. Subir a imaxe desde o ordenador
# Abrirase unha ventá para que selecciones a imaxe.
subida = files.upload()
for arquivo in subida.keys():
imaxe = cv2.imread(arquivo)
# 2. Converter a imaxe de BGR a HSV.
# O espazo HSV (Hue, Saturation, Value) axuda a definir rangos de cores de forma máis natural.
hsv = cv2.cvtColor(imaxe, cv2.COLOR_BGR2HSV)
# 3. Definir os rangos de cores en HSV e segmentar cada cor.
## Segmentación da cor VERDE
verde_inferior = np.array([36, 25, 25])
verde_superior = np.array([70, 255, 255])
mascara_verde = cv2.inRange(hsv, verde_inferior, verde_superior)
segmento_verde = cv2.bitwise_and(imaxe, imaxe, mask=mascara_verde)
## Segmentación da cor AZUL
azul_inferior = np.array([94, 80, 2])
azul_superior = np.array([126, 255, 255])
mascara_azul = cv2.inRange(hsv, azul_inferior, azul_superior)
segmento_azul = cv2.bitwise_and(imaxe, imaxe, mask=mascara_azul)
# 4. Mostrar a imaxe orixinal e as imaxes segmentadas.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)
print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
print("Segmentación da cor azul:")
cv2_imshow(segmento_azul)
Tarefa 3
Código Python: Segmentación en verde, azul e vermello
import cv2
import numpy as np
from google.colab import files
from google.colab.patches import cv2_imshow
# 1. Subir a imaxe desde o ordenador
# Abrirase unha ventá para que selecciones a imaxe.
subida = files.upload()
for arquivo in subida.keys():
imaxe = cv2.imread(arquivo)
# 2. Converter a imaxe de BGR a HSV.
# O espazo HSV (Hue, Saturation, Value) axuda a definir rangos de cores de forma máis natural.
hsv = cv2.cvtColor(imaxe, cv2.COLOR_BGR2HSV)
# 3. Definir os rangos de cores en HSV e segmentar cada cor.
## Segmentación da cor VERMELLA
# O vermello divídese en dous rangos (porque no círculo HSV o vermello aparece en ambos extremos).
vermello_inferiorinicial = np.array([0, 120, 70])
vermello_superiorinicial = np.array([10, 255, 255])
mascara_vermellainicial = cv2.inRange(hsv, vermello_inferiorinicial, vermello_superiorinicial)
vermello_inferiorfinal = np.array([170, 120, 70])
vermello_superiorfinal = np.array([180, 255, 255])
mascara_vermellafinal = cv2.inRange(hsv, vermello_inferiorfinal, vermello_superiorfinal)
# Unimos as dúas máscaras do vermello.
mascara_vermella = mascara_vermellainicial + mascara_vermellafinal
segmento_vermello = cv2.bitwise_and(imaxe, imaxe, mask=mascara_vermella)
## Segmentación da cor VERDE
verde_inferior = np.array([36, 25, 25])
verde_superior = np.array([70, 255, 255])
mascara_verde = cv2.inRange(hsv, verde_inferior, verde_superior)
segmento_verde = cv2.bitwise_and(imaxe, imaxe, mask=mascara_verde)
## Segmentación da cor AZUL
azul_inferior = np.array([94, 80, 2])
azul_superior = np.array([126, 255, 255])
mascara_azul = cv2.inRange(hsv, azul_inferior, azul_superior)
segmento_azul = cv2.bitwise_and(imaxe, imaxe, mask=mascara_azul)
# 4. Mostrar a imaxe orixinal e as imaxes segmentadas.
# cv2_imshow é a ferramenta de Colab para mostrar imaxes.
print("Imaxe orixinal:")
cv2_imshow(imaxe)
print("Segmentación da cor vermella:")
cv2_imshow(segmento_vermello)
print("Segmentación da cor verde:")
cv2_imshow(segmento_verde)
print("Segmentación da cor azul:")
cv2_imshow(segmento_azul)