Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

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

Jerarquía de contornos

Jerarquía de contornos en OpenCV con Python

Introducción

La jerarquía de contornos es una estructura que permite organizar y entender mejor los contornos detectados en una imagen. Es especialmente útil cuando se tratan imágenes complejas con múltiples objetos o si se requiere un análisis más profundo de la forma en que estos contornos están relacionados entre sí. Esta jerarquía es fundamental para tareas como el reconocimiento de formas, análisis morfológico y segmentación.

Explicación principal

En OpenCV, los contornos son básicamente una representación 2D de las líneas cerradas que bordean un objeto en una imagen. La jerarquía de estos contornos proporciona información sobre cómo se conectan entre sí. Esto significa que cada contorno puede tener uno o más contornos "hijos", lo que indica que el contorno hijo está contenido dentro del padre.

La jerarquía se representa en forma de árbol, donde cada nodo (contorno) tiene una lista de sus hijos, un padre y un hermano. La función findContours en OpenCV devuelve los contornos detectados y la jerarquía asociada a estos contornos.

Ejemplo práctico

Veamos cómo se puede utilizar findContours para obtener la jerarquía de contornos y analizarla:

import cv2
import numpy as np

# Cargar una imagen en escala de grises
image = cv2.imread('imagen.jpg', 0)
ret, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Dibujar contornos y jerarquía en la imagen
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
for i in range(len(contours)):
    if hierarchy[0][i][3] != -1:
        print(f'Contorno {i} es hijo de contorno {hierarchy[0][i][3]}')

cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este ejemplo, hierarchy es una matriz que contiene la jerarquía de los contornos. Cada fila en hierarchy está compuesta por cuatro valores: [next, previous, first child, parent]. Si un contorno no tiene hijos, el valor del primer hijo será -1.

Errores típicos / trampas

  1. No inicializar la jerarquía correctamente: Asegúrate de que estés utilizando cv2.RETR_TREE como método para recuperar los contornos. Si usas otro método, la jerarquía no se devolverá.
  1. Desconocer el formato de hierarchy: Es común confundirse con el formato del array hierarchy. Cada fila corresponde a un contorno y cada columna contiene información sobre el siguiente, anterior, primer hijo y padre.
  1. No procesar adecuadamente la jerarquía: La jerarquía puede ser compleja en imágenes con múltiples niveles de anidamiento de contornos. Asegúrate de implementar un proceso lógico para manejar la estructura jerárquica correctamente.

Checklist accionable

  1. Verifica que estés utilizando cv2.RETR_TREE: Asegúrate de que estés recuperando los contornos con una jerarquía completa.
  1. Análisis previo de la imagen: Antes de aplicar el algoritmo, asegúrate de que la imagen es adecuada y clara para la detección de contornos.
  1. Implementa un bucle para recorrer los contornos: Utiliza un bucle for o una función recursiva para navegar por la jerarquía.
  1. Visualiza los contornos detectados: Dibuja los contornos en la imagen original y verifica que se estén capturando correctamente.
  1. Maneja adecuadamente el formato de hierarchy: Asegúrate de entender cómo interpretar cada fila del array hierarchy.

Cierre con "Siguientes pasos"

Pasos siguientes

  1. Probar con diferentes imágenes: Experimenta con diferentes tipos de imágenes para ver cómo afectan la jerarquía y el resultado de los contornos.
  1. Implementar análisis morfológico avanzado: Usa la jerarquía para implementar operaciones morfológicas más complejas, como aperturas y cierres.
  1. Desarrollar un algoritmo personalizado: Utiliza la información de jerarquía para desarrollar tu propio algoritmo de detección de objetos o segmentación.

Siguiendo estos pasos, podrás obtener una comprensión más profunda de cómo funcionan los contornos y su jerarquía en OpenCV. La jerarquía es una herramienta poderosa que puede mejorar significativamente el análisis visual en imágenes complejas.

Contacto

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