Está en la página 1de 4

OPTATIVA DE PROFESIONALIZACIÓN

Integrantes: Bonilla Andrés


NRC: 9503
Carrera: Ingeniería Mecatrónica
En video, generar 2 ventanas, en la una encerrar en un rectángulo las monedas que
aparezcan en la escena y en la segunda ventana, encerrar en una elipse las monedas
que aparezcan en una escena

import cv2
# from __future__ import print_function
import cv2 as cv
import numpy as np
import argparse
import random as rng
rng.seed(12345)

def thresh_callback(val):
threshold = val
# Detect edges using Canny
canny_output = cv.Canny(src_gray, threshold, threshold * 2)
# Find contours
contours, hierarchy = cv.findContours(canny_output, cv.RETR_TREE,
cv.CHAIN_APPROX_SIMPLE)
# Draw contours
drawing = np.zeros((canny_output.shape[0], canny_output.shape[1],
3), dtype=np.uint8)

#Cantidad de contronos ecnotrados


print('Cantidad de Contornos encontrados',len(contours))

for i in range(len(contours)): #len(contours) me devuelve la


cantidad de contornos encontrados
color = (rng.randint(0,256), rng.randint(0,256),
rng.randint(0,256))
cv2.drawContours(drawing, contours, i, color, 2, cv.LINE_8,
hierarchy, 0)
# Show in a window
cv2.imshow('Contours', drawing)

captura=cv2.VideoCapture(0)
while(True):

aux, src = captura.read()

gris = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # Escala de Grises

ret, trh = cv2.threshold(gris, 175, 255, cv2.THRESH_BINARY)


#cv2.imshow("Imagen Binarizada", trh)

canny = cv2.Canny(trh, 20, 150)

canny = cv2.dilate(canny, None, iterations=1)


canny = cv2.erode(canny, None, iterations=1)
canny = cv2.dilate(canny, None, iterations=1)
contornos, _ = cv2.findContours(canny, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

Moneda5=0.00
Moneda10=0.00
Moneda25=0.00
Moneda50=0.00
Moneda100=0.00
Monedas = 0.00
Dinero =0.00
if len(contornos) != 0:
controlTamaño = []
for i, c in enumerate(contornos):
if c.shape[0] > 60: #Control de tamaños
controlTamaño.append(contornos[i])

#cv2.drawContours(frame, controlTamaño, -1, (0, 0, 255), 2,


cv2.LINE_AA)

#BUSCAR EL AREA MAS GRANDE QUE REPRESENTA A LA DE 50 CENTAVOS


lista_areas = []

for i in controlTamaño:
area = cv2.contourArea(i)
lista_areas.append(area)
if len(lista_areas) != 1:
#Te quedas con el area más grande
Moneda_mas_grande =
controlTamaño[lista_areas.index(max(lista_areas))]
area_max=max(lista_areas)
#print('Area Máxima: ', area_max)
area = cv2.contourArea(Moneda_mas_grande)
x, y, w, h = cv2.boundingRect(Moneda_mas_grande)
#cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0),
2)

#print(lista_areas)

for i in lista_areas:
#Moneda 50 Centavos
if (area_max/1.1)< i <(area_max/0.9):
Moneda50 = Moneda50 + 5

#monedas de 1 dolar
if (area_max/1.55)< i <(area_max/1.4):
Moneda100=Moneda100+10
# monedas de 25 centavos
if (area_max / 1.9) < i < (area_max / 1.65):
Moneda25 = Moneda25+2.5

# monedas de 5 centavos
if (area_max / 2.4) < i < (area_max / 1.9):
Moneda5 = Moneda5 + 0.5

# monedas de 10 centavos
if (area_max / 4) < i < (area_max / 2.7):
Moneda10 = Moneda10 + 1

#Contar Dinero
Dinero = Moneda10 + Moneda25 + Moneda50 + Moneda100
+Moneda5

#Contar Monedas
Monedas =len(lista_areas)

cv2.putText(src, 'Monedas: {:.0f}'.format(Monedas), (0,


11), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
# cv2.putText(frame, 'Dinero: {:.2f}'.format(Dinero/10),
(0, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
cv2.imshow("Imagen Original", src)
else:
# cv2.putText(frame, 'Monedas: 1', (0, 11),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
# cv2.putText(frame, 'Dinero: 0.50', (0, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.5,(0, 0, 255), 1)
cv2.imshow("Imagen Original", src)

else:
cv2.imshow("Imagen Original", src)

src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)


src_gray = cv.blur(src_gray, (3, 3))
# Create Window
source_window = 'Source'
cv.namedWindow(source_window)
cv.imshow(source_window, src)
max_thresh = 255
thresh = 100 # initial threshold
cv.createTrackbar('Canny Thresh:', source_window, thresh,
max_thresh, thresh_callback)
thresh_callback(thresh)

if cv2.waitKey(1) & 0xFF == ord("q"):


break
captura.release()
cv2.destroyAllWindows()

También podría gustarte