Reconocimiento de objetos utilizando detección de contornos
- publicado por Ing. Jesús Martínez
- Fecha mayo 17, 2023
Contenido
- Introducción
- Configuración del entorno
- Cargar y preprocesar la imagen
- Detección de contornos
- Análisis de contornos
- Resultado y conclusiones
Introducción
El reconocimiento de objetos es una tarea esencial en la visión por computadora, ya que nos permite identificar y clasificar objetos de interés en imágenes o videos. En esta entrada del blog, exploraremos cómo utilizar la detección de contornos en Python y OpenCV para reconocer objetos en una imagen. Aprenderemos cómo detectar y analizar los contornos de los objetos para obtener información valiosa sobre su forma y tamaño.
Configuración del entorno
Antes de comenzar, asegúrate de tener Python y OpenCV instalados en tu sistema. Puedes utilizar herramientas como pip o conda para instalar las bibliotecas necesarias. Una vez configurado el entorno, importa las bibliotecas necesarias en tu script de Python.
import cv2
import numpy as np
Cargar y preprocesar la imagen
El primer paso es cargar la imagen en la que deseas reconocer objetos. Además, es posible que desees aplicar preprocesamiento a la imagen, como reducción de ruido o ajuste de contraste, para mejorar la calidad de los contornos.
# Cargar imagen
image = cv2.imread('figuras.png')
# Preprocesamiento opcional
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0) # Reducción de ruido con filtro Gaussiano
Detección de contornos
En esta etapa, utilizaremos la función cv2.findContours()
de OpenCV para detectar los contornos de los objetos en la imagen. Podemos especificar un umbral de binarización para obtener mejores resultados según las características de los objetos que deseamos reconocer.
# Binarización de la imagen
_, threshold = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
# Detección de contornos
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Análisis de contornos
Una vez que hayamos detectado los contornos, podemos analizarlos para obtener información sobre los objetos reconocidos. Por ejemplo, podemos calcular el área de los contornos, el perímetro o el centroide de cada objeto.
for contour in contours:
# Calcular el área del contorno
area = cv2.contourArea(contour)
if area > 0:
# Calcular el perímetro del contorno
perimeter = cv2.arcLength(contour, True)
# Calcular el centroide del contorno
M = cv2.moments(contour)
centroid_x = int(M["m10"] / M["m00"])
centroid_y = int(M["m01"] / M["m00"])
# Dibujar el contorno y el centroide en la imagen original
cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)
cv2.circle(image, (centroid_x, centroid_y), 5, (0, 0, 255), -1)
Resultado
Una vez que hayamos analizado los contornos y marcado los objetos reconocidos en la imagen, podemos mostrar el resultado y extraer conclusiones sobre el reconocimiento de objetos.
# Mostrar imagen con contornos y centroides
cv2.imshow('Detected Objects', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Conclusiones
En este artículo, hemos aprendido cómo utilizar la detección de contornos en Python y OpenCV para reconocer objetos en una imagen. La detección de contornos nos permite obtener información valiosa sobre la forma y el tamaño de los objetos, lo que puede ser utilizado para clasificar o contar objetos en aplicaciones más avanzadas.
Es importante tener en cuenta que la detección de contornos es solo el primer paso en el reconocimiento de objetos. Para tareas más complejas, como la clasificación de objetos, se requerirán técnicas adicionales, como la extracción de características o el aprendizaje automático. Sin embargo, este enfoque básico de detección de contornos nos proporciona una base sólida para comenzar a explorar el mundo del reconocimiento de objetos.
Código y material exclusivo
Debes estar registrado para acceder al material exclusivo Registrarme
Soy un apasionado por la innovación tecnológica, el desarrollo y el emprendimiento. Durante mi educación superior me enfoqué en la programación de software para visión artificial e inteligencia artificial. Poco después al graduarme tuve la oportunidad de aplicar estos conocimientos en el desarrollo de soluciones para empresas como General Motors, Ford, Harley-Davidson, Mack, Tesla y unas cuantas empresas más del ramo automotriz.