Você está na página 1de 3

#Algoritmo de deteccion de triangulos

#Por Glar3
#
#
#Detecta triangulos azules
#Librerias
import cv2
import numpy as np
#Iniciar camara
captura = cv2.VideoCapture(1)
while(1):
#Caputrar una imagen y convertirla a hsv
_, imagen = captura.read()
hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)
#Guardamos el rango de colores hsv (azules)
bajos = np.array([67,40,105], dtype=np.uint8)
altos = np.array([129, 255, 182], dtype=np.uint8)

#Crear una mascara que detecte los colores


mask = cv2.inRange(hsv, bajos, altos)
#Filtrar el ruido con un CLOSE seguido de un OPEN
kernel = np.ones((6,6),np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
#Difuminamos la mascara para suavizar los contornos y aplicamos filtro canny
blur = cv2.GaussianBlur(mask, (5, 5), 0)
edges = cv2.Canny(mask,1,2)
#Si el area blanca de la mascara es superior a 500px, no se trata de ruido
image, contours, hier = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX
_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
i = 0
for extension in areas:
if extension > 600:
actual = contours[i]
approx = cv2.approxPolyDP(actual,0.05*cv2.arcLength(actual,True),True)
if len(approx)==3:
cv2.drawContours(imagen,[actual],0,(0,0,255),2)
cv2.drawContours(mask,[actual],0,(0,0,255),2)
i = i+1
cv2.imshow('mask', mask)
cv2.imshow('Camara', imagen)
tecla = cv2.waitKey(5) & 0xFF
if tecla == 27:
break
cv2.destroyAllWindows()

import cv2
import numpy as np
from cv2 import MORPH_OPEN

cv2.namedWindow("zona",cv2.WINDOW_AUTOSIZE)
cv2.namedWindow("bola",cv2.WINDOW_AUTOSIZE)
cap = cv2.VideoCapture(2)
kernel = np.ones((5,5),np.uint8)
r,h,c,w = 250,90,400,125 # simply hardcoded the values
track_window = (c,r,w,h)

while(1):
# tomamos la imagen
_, frame = cap.read()
#foto = cv2.imread(frame,0)
#Escoger el area de sehuimiento
roi = frame[r:r+h, c:c+w]
# Para menos uso de memoria tranformamos a HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Definimos los rangos del color Azul en HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Definimos la mascara para resaltar los puntos azules
mask = cv2.inRange(hsv, lower_blue, upper_blue)
roi_hist = cv2.calcHist([hsv],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
# Definimos los rangos del color de la bola en HSV
#upper_red = np.array([50,30,20])
#lower_red = np.array([90,90,90])
# Definimos la mascara para resaltar los puntos azules
#mask2 = cv2.inRange(hsv, lower_blue, upper_blue)
dst = cv2.calcBackProject([hsv],[0],roi_hist,[0,180],1)
# apply meanshift to get the new location
ret, track_window = cv2.meanShift(dst, track_window, term_crit)
# Draw it on image
x,y,w,h = track_window
img2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

x,y,w,h=cv2.boundingRect(opening)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),3)
cv2.circle(frame,(x+w/2,y+h/2),5,(0,0,255),1)
cv2.imshow('img1',img2)
#cv2.imshow('img',foto)
cv2.imshow('zona',mask)
#cv2.imshow('bola',mask2)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()

Você também pode gostar