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 = [Link]('[Link]')
imagen2=[Link]('[Link]',0)
#Creamos nuestro arreglo de ceros uwu
arreglo = [Link]([Link], np.uint8)
vaarreglo = 0
# Pasamos nuestra imagen a grises
grises = [Link](imagen, cv2.COLOR_BGR2GRAY)
ret, thresh = [Link](grises, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# Encontrar nuestros bordes 7w7
bordes = [Link](grises, 200, 300)
# Ventana de impresión
[Link]("bordes de los objetos encontrados UwU", bordes)
# Contar cuántos bordes tenemos
ctns, _ = [Link](bordes, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Dibujamos nuestros bordes
[Link](imagen, ctns, -1, (0, 0, 255), 2)
# Ventana de impresión x2
[Link]("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 * [Link](c, True)
b = [Link](c, a, True)
# Forma de diferenciar un cuadrado de un rectangulo
x, y, w, h = [Link](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
[Link](0)
#Destruimos nuestras ventanas
[Link]()
#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