import numpy as np import argparse import cv2 ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="Path to the image file") args = vars(ap.parse_args()) image = cv2.imread(args["image"]) cv2.imshow("Original", image) mask = mf.color_filter(image, "green") cv2.imshow("Mask", mask) cv2.waitKey(0) [centroide, cnts] = mf.get_centroid(mask, "contorno") cX = centroide[0][0] cY = centroide[0][1] print("------------------------------------------") print("[DEBUG] centroide: {}".format(centroide)) # print("Size cnts: {}".format(len(cnts))) # print("Size cnts[0]: {}".format(len(cnts[0]))) # print("Size cnts[0][0]: {}".format(len(cnts[0][0]))) # Hacer lista con coord horizontales y lista con pares x,y cnt = cnts[0] # puntos_hor = [] puntos_lista = [] for punto in cnt: # puntos_hor.append(punto[0][0])
# La idea es separar dos objetos que se ven del mismo # color en la imagen (dos yemas verdes) import mis_funciones as mf import numpy as np import cv2 camara = cv2.VideoCapture(1) for i in range(20): image = mf.take_picture(camara) filtrada = mf.color_filter(image, "green") r = mf.get_centroid(filtrada) # Máscara para obtener uno de los dos objetos mask_izq = np.zeros(filtrada.shape[:2], dtype="uint8") mask_izq[:, :r[0]] = 255 mask_der = cv2.bitwise_not(mask_izq) objeto_izq = cv2.bitwise_and(filtrada, mask_izq) objeto_der = cv2.bitwise_and(filtrada, filtrada, mask=mask_der) print("Foto #{:02d}".format(i)) # cv2.imshow("mask_izq", mask_izq) # cv2.imshow("mask_der", mask_der) # cv2.imshow("Foto", image) cv2.imshow("Objeto Izquierdo", objeto_izq) cv2.imshow("Objeto Derecho", objeto_der) cv2.waitKey(1000)
args = vars(ap.parse_args()) camara = cv2.VideoCapture(1) for i in range(3000): # Toma una foto # foto = mf.take_picture(camara) _, foto = camara.read() # Filtra por color filtered = mf.color_filter(foto, args["color"]) clone = filtered.copy() # Centroide # OJO: al usar método de contorno r es una lista de centroides r, cnts = mf.get_centroid(filtered, "contorno") mf.draw_circle(foto, r[0]) # print(r) # cnts = mf.get_contours(filtered) # print("# de contornos: {}".format(len(cnts))) if cnts != 0: cv2.drawContours(foto, cnts, -1, (0, 255, 0), 3) # mf.show_picture(picture=picture, delay=1) cv2.imshow("Mask", clone) cv2.imshow("Foto", foto) # Esta espera es necesaria para que se puedan abrir las ventanas cv2.waitKey(1) print("----------------------------------")
# Imagen: Foto de la mano imagen = mf.take_picture(camara) cv2.imshow("Foto", imagen) cv2.waitKey(0) # Máscara roja, contorno y área mascara_rojo = mf.color_filter(imagen, "red") cnt_rojo = mf.get_contours(mascara_rojo.copy()) area_rojo = cv2.contourArea(cnt_rojo[0]) print("[DEBUG] Area rojo: {}".format(area_rojo)) # ================================================================ # OPCION: buscar lso dos contornos más grandes en la máscara verde # Máscara verde, contornos y area mascara_verde = mf.color_filter(imagen, "green") r, _ = mf.get_centroid(mascara_verde) # ================================================================ # Máscara derecha (yema índice) mask_der = np.zeros(mascara_verde.shape[:2], dtype="uint8") mask_der[:, r[0]:] = 255 mascara_verde_temp = mascara_verde.copy() # DEBUG # cv2.imshow("Máscara verde temp (1)", mascara_verde_temp) yema_indice = cv2.bitwise_and(mascara_verde_temp, mascara_verde_temp, mask=mask_der) # DEBUG
print("Args['dedo']: {}".format(args["dedo"])) print("Args['cantidad_motores']: {}".format(args["motores"])) # -------------------------------------------------- # Conección de cámara y mano print("\tConectando cámara...") camara = cv2.VideoCapture(1) print("\tConectando mano...") mano = mf.Mano(camara) print("\tListo!\n") # Posición objetivo imagen = mf.take_picture(camara) filtrada = mf.color_filter(imagen, "red") [r_objetivo, _] = mf.get_centroid(filtrada, method="contorno") print("\n\tPunto objetivo: {}".format(r_objetivo)) # -------------------------------------------------- # Controlador basado en EnRoCo print("\tInstanciando controlador...") # Argumentos if args["dedo"] == None: dedo = "indice" else: dedo = args["dedo"] if args["motores"] == None: cantidad_motores = 2 else: cantidad_motores = int(args["motores"])