Hasta ahora logramos detectar el guante rojo. Vamos a intentar detectar el guante verde.
En lugar de cambiar los rangos en el otro cuaderno, como ejercicio final de este tutorial, tenés que implementar una función llamada locate_object
que reciba una imagen y los rangos de color, y devuelva la posición del objeto con ese color en la imagen. De esta forma tendremos bien organizado el código para detectar otros objetos en un futuro.
La función sólo debe hacer lo que se vió en el otro tutorial; convertir a hsv, filtrar por color, luego erosionar, luego calcular el centro de masa del objeto, y se puede copiar el código utilizado anteriormente.
#IMPORTS DEL CUADERNO ANTERIOR Y FUNCIONES UTILES
import matplotlib.patches as patches
# comando de Jupyter para que las imagenes se muestren automaticamente
%matplotlib inline
#numpy es la libreria de arreglos de python (la llamaremos np)
import numpy as np
# el modulo pyplot de matplotlib (que llamaremos plt) nos permite mostrar imƔgenes
import matplotlib.pyplot as plt
#el modulo matplotlib.colors nos permite transformar el espacio de color de una imagen
import matplotlib.colors
#el modulo io de skimage sirve para cargar y guardar imagenes
from skimage import io
def dibujar_cuadrado(position):
size=70
canvas = plt.gca()
size_x,size_y=(size,size)
position_reversed=(position[1]-size_y/2,position[0]-size_x/2)
rectangle=patches.Rectangle(position_reversed, size_x,size_y, fill=True)
canvas.add_patch(rectangle)
def erode(segmentation_mask):
#IMPLEMENTAR
return 0 # retornar mascara de segmentacion erosionada
def segment_by_color(image_hsv,range_h,range_s,range_v):
#IMPLEMENTAR
return 0 # retornar mascara de segmentacion
def calculate_mass_center(mask):
#IMPLEMENTAR
return np.array([0,0]) #retornar posicion del centro de masa de la mƔscara
def locate_object(image_rgb,range_h,range_s,range_v):
#convertir la imagen de rgb a hsv
#IMPLEMENTAR
#generar la mÔscara de segmentación en base al color
#IMPLEMENTAR
#erosionar la mƔscara
#IMPLEMENTAR
#calcular centro de masa de la mÔscara para encontrar la posición del objeto
#IMPLEMENTAR
return np.array([0,0]) # retornar posición
green_range_h=(0/255, 0/255)
green_range_s=(0/255, 0/255)
green_range_v=(0/255, 0/255)
image = io.imread('guante.png')/255
green_glove_position=locate_object(image,green_range_h,green_range_s,green_range_v)
print("Las coordenadas del centro de la mano con el guante verde son:")
print(green_glove_position) # deberĆa imprimir algo similar a [570,1170]
plt.imshow(image)
dibujar_cuadrado(green_glove_position)