Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

OpenCV con Python, Unidad 8 — Contornos y formas, 8.1 — Detección de contornos ·

findContours

findContours: Detección de Contornos en OpenCV con Python

Introducción

La detección de contornos es un paso fundamental en la visión por computador, permitiendo a los sistemas analizar y comprender las formas presentes en una imagen. En OpenCV, la función findContours se utiliza para extraer estos contornos de una imagen binaria. Esta técnica es crucial para tareas como reconocimiento de patrones, clasificación de objetos e identificación de formaciones visuales.

Explicación principal con ejemplos

La función findContours se encuentra en la biblioteca de OpenCV y permite extraer los contornos de una imagen binaria. Este proceso es esencial para analizar formas complejas o para simplificar una imagen para su posterior procesamiento. A continuación, se muestra un ejemplo básico de cómo usar findContours:

import cv2
import numpy as np

# Cargar la imagen y convertirla a escala de grises
image = cv2.imread('example_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Aplicar umbralización para obtener una imagen binaria
_, binary_image = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

# Encontrar los contornos en la imagen binaria
contours, _ = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Dibujar los contornos sobre la imagen original
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

En este ejemplo, cv2.threshold se utiliza para convertir la imagen en una binaria invirtiendo el color del fondo y de los objetos. Luego, findContours extrae los contornos de esta imagen binaria.

Errores típicos / trampas

  1. Uso incorrecto del parámetro mode: El parámetro mode puede tomar diferentes valores (cv2.RETR_EXTERNAL, cv2.RETR_LIST, cv2.RETR_CCOMP, cv2.RETR_TREE). Si se utiliza incorrectamente, el comportamiento de la detección de contornos será errático. Por ejemplo, si se usa cv2.RETR_EXTERNAL en lugar de cv2.RETR_TREE, solo se obtendrán los contornos externos y no se detectarán subcontornos.
  1. Falta de umbralización adecuada: La detección de contornos es más efectiva cuando la imagen está binarizada correctamente. Si el umbral elegido es incorrecto, podrían aparecer contornos artificiales o falte algún contorno significativo. Es importante probar diferentes umbrales y técnicas de umbralización para encontrar los mejores resultados.
  1. Error en la interpretación del resultado: findContours devuelve una lista de contornos y su jerarquía (si se utiliza el parámetro cv2.RETR_CCOMP o cv2.RETR_TREE). Sin embargo, estos datos pueden ser difíciles de interpretar sin práctica. Por ejemplo, un error común es confundir los contornos con sus respectivas jerarquías.

Checklist accionable

Para asegurarse de que la detección de contornos se realiza correctamente, siga este checklist:

  1. Verifique la imagen: Asegúrese de que la imagen a analizar esté en el formato correcto (BGR o RGB) y tenga buena calidad.
  2. Ajuste adecuado del umbral: Pruebe diferentes métodos de umbralización (cv2.THRESH_BINARY, cv2.ADAPTIVE_THRESH_MEAN_C, etc.) para encontrar los que mejor se adapten a su imagen.
  3. Revisar el modo de recorte: Asegúrese de seleccionar la opción correcta entre cv2.RETR_EXTERNAL, cv2.RETR_LIST, cv2.RETR_CCOMP y cv2.RETR_TREE.
  4. Compruebe los contornos obtenidos: Dibuje los contornos en una imagen y verifique si están correctamente identificados.
  5. Revisar la jerarquía de contornos (si se utiliza): Asegúrese de entender cómo funciona la jerarquía y cómo interpretarla.

Cierre con "Siguientes pasos"

La detección de contornos es una herramienta poderosa en la visión por computador, pero su uso efectivo requiere práctica y un entendimiento claro de los parámetros involucrados. Para mejorar aún más sus habilidades:

  • Practique con diferentes tipos de imágenes: Trabaje con imágenes de diversas fuentes para familiarizarse con cómo afectan la calidad del resultado.
  • Explore técnicas avanzadas de umbralización: Aprenda a usar técnicas como cv2.adaptiveThreshold y cv2.threshold en diferentes combinaciones para mejorar los resultados.
  • Utilice OpenCV 4.x o superior: La versión más reciente de OpenCV ofrece mejoras significativas en rendimiento y funcionalidad, especialmente en la detección de contornos.

Siguiendo estas pautas, podrá maximizar el uso de findContours para su proyecto en visión por computador.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).