Exemple #1
0
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])
Exemple #2
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("----------------------------------")
Exemple #4
0
# 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
Exemple #5
0
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"])