Está en la página 1de 4

Universidad Veracruzana

Facultad de negocios y tecnologías

Laboratorio de resolución de problemas

Roa Rebolledo Arturo Getsemani

Conde Marín Irving Rafael, zS20006735

Ingeniería de software
Proyecto Final Python: Detección de objetos en imágenes
# Importamos nuestras clases
import cv2
import numpy as np

# Importamos nuestra imagen


imagen = cv2.imread('Diapositiva1.JPG')
imagen2=cv2.imread('Diapositiva1.JPG',0)
#Creamos nuestro arreglo de ceros uwu
arreglo = np.zeros(imagen2.shape, np.uint8)
vaarreglo = 0

# Pasamos nuestra imagen a grises


grises = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(grises, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# Encontrar nuestros bordes 7w7


bordes = cv2.Canny(grises, 200, 300)

# Ventana de impresión
cv2.imshow("bordes de los objetos encontrados UwU", bordes)

# Contar cuántos bordes tenemos


ctns, _ = cv2.findContours(bordes, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# Dibujamos nuestros bordes


cv2.drawContours(imagen, ctns, -1, (0, 0, 255), 2)

# Ventana de impresión x2
cv2.imshow("Bordes sobre nuestra imagen definida", imagen)

# Espacio
print(" ")

# Saber qué figuras tenemos en nuestra imagen


# PD: no pude hacer que encontrara la sexta figura :c
for c in ctns:
# Con este valor podemos ir encontrando las figuras dibujadas, dependiendo el borde
# Si le cambia el valor con otros valores ya no detecta algunas figuras(ejemplo: 0.005)
a = 0.01 * cv2.arcLength(c, True)
b = cv2.approxPolyDP(c, a, True)
# Forma de diferenciar un cuadrado de un rectangulo
x, y, w, h = cv2.boundingRect(b)
#Si los bordes son iguales a 3, entonces decimos que se trata de un triangulo
if len(b) == 3:
print("Encontramos un triangulo")
# Si los bordes son iguales a 4, entonces verificamos de qué figura se trata
if len(b) == 4:
diferencia = float(w) / h
if diferencia == 1:
# Si los bordes son iguales entonces decimos que se trata de un cuadrado
print("Encontramos un cuadrado")
#De caso contrario decimos que se trata de un rectangulo
else:
print("Encontramos un rectangulo")
# Si los bordes son iguales a 5, entonces decimos que se trata de un Pentagono
if len(b) == 5:
print("Encontramos un pentagono")
# Si los bordes son iguales a 6, entonces decimos que se trata de un Hexagono
if len(b) == 6:
print("Encontramos un hexagono")
# Si los bordes son iguales a 8, entonces decimos que se trata de un Octagono
if len(b) == 8:
print("Encontramos un octagono")
# Si los bordes son mayores de 10 lados, entonces decimos que se trata de un circulos
if len(b) > 10:
print("Encontramos un circulo")

# Espacio x2
print(" ")

# Arreglo para dibujar nuestra imagen

for i in range(368):
for j in range(707):
if imagen2[i, j] > 0:
imagen2[i, j] = 255
if imagen2[i, j] == 255 and vaarreglo == 0:
vaarreglo = 1
arreglo[i, j] = vaarreglo
else:
if imagen2[i, j] == 255 and arreglo[i, j - 1] != 0 and arreglo[i-1, j] == 0:
arreglo[i, j] = arreglo[i, j - 1]
elif imagen2[i, j] == 255 and arreglo[i, j - 1] == 0 and arreglo[i-1, j] != 0:
arreglo[i, j] = arreglo[i-1, j]
elif imagen2[i, j] == 255 and arreglo[i, j - 1] == 0 and arreglo[i, j - 1] == 0:
vaarreglo = vaarreglo + 1
arreglo[i, j] = vaarreglo
elif imagen2[i, j] == 255 and arreglo[i, j - 1] != 0 and arreglo[i-1, j] != 0:
if arreglo[i, j - 1] > arreglo[i-1, j]:
arreglo[i, j] = arreglo[i-1, j]
con=1
while arreglo[i, j-con] > arreglo[i, j]:
arreglo[i, j - con] = arreglo[i, j]
con = con + 1
vaarreglo = vaarreglo - 1
elif arreglo[i, j - 1] == arreglo[i-1, j]:
arreglo[i, j] = arreglo[i, j - 1]

#Imprimimos nuestras etiquetas


print ("Número de etiquetas: ",vaarreglo)

# Imprimir la cantidad de contornos encontrados


print('Número de figuras encontrados: ', len(ctns))

#Hacemos que el evento espere de forma indefinida, poniendo un 0


cv2.waitKey(0)
#Destruimos nuestras ventanas
cv2.destroyAllWindows()

#Este proyecto puede ser utilizado en la detección de objetos en las imagenes, podemos ver únicamente los bordes de los
#objetos presentes, podemos visualizar los objetos con sus bordes remarcados y contar cuántos objetos hay en presentes en la imagen

También podría gustarte