Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

OpenCV con Python, Unidad 8 — Contornos y formas, 8.2 — Análisis de formas ·

Área y perímetro

Área y perímetro: Análisis de formas con OpenCV

Introducción

La capacidad de medir el área y el perímetro de formas es fundamental en muchas aplicaciones de visión por computador, como la detección de objetos, la segmentación de imágenes y el análisis de patrones. Estas métricas proporcionan una forma objetiva y cuantitativa de describir las características de las formas, lo que facilita el análisis y la toma de decisiones en diversos campos, desde robótica hasta medicina.

OpenCV ofrece herramientas robustas para calcular el área y perímetro de contornos detectados en imágenes. En esta unidad del curso sobre OpenCV con Python, aprenderás a utilizar estas funciones de forma efectiva y a evitar algunos de los errores comunes que pueden surgir durante su implementación.

Explicación principal

Cálculo de Área y Perímetro

Para calcular el área y perímetro de contornos en OpenCV, puedes usar las funciones contourArea() para obtener el área y arcLength() para obtener el perímetro. Veamos un ejemplo práctico:

import cv2
import numpy as np

# Cargar imagen
image = cv2.imread('example_image.png', cv2.IMREAD_GRAYSCALE)

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

# Calcular el área y perímetro de los contornos
for cnt in contours:
    area = cv2.contourArea(cnt)
    perimeter = cv2.arcLength(cnt, True)
    
    print(f"Área: {area}, Perímetro: {perimeter}")

Análisis de Formas

Usando estas métricas, puedes realizar análisis más detallados. Por ejemplo, si estás trabajando en la detección de objetos, el área y perímetro pueden ayudarte a distinguir entre diferentes tipos de objetos basándote en sus características geométricas.

Ejemplo Práctico

Supongamos que tienes una imagen con varias formas circulares y cuadradas. Quieres identificar y analizar estas formas:

import cv2
import numpy as np

# Cargar imagen
image = cv2.imread('shapes.png', cv2.IMREAD_GRAYSCALE)

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

for cnt in contours:
    area = cv2.contourArea(cnt)
    perimeter = cv2.arcLength(cnt, True)
    
    # Dibujar el contorno en la imagen
    cv2.drawContours(image, [cnt], 0, (255), 3)
    
    print(f"Área: {area}, Perímetro: {perimeter}")

Resultados

El código anterior pintará los contornos encontrados en la imagen original y mostrará el área y perímetro de cada uno. Con estos datos, puedes clasificar las formas según sus características.

Errores típicos / trampas

  1. Uso incorrecto del modo RETR_TREE: Si no estás seguro de qué valor usar para mode, asegúrate de entender la diferencia entre cv2.RETR_EXTERNAL, cv2.RETR_LIST, y cv2.RETR_TREE. Usar el modo incorrecto puede resultar en contornos incompletos o redundantes.
  1. No normalizar áreas y perimetros: Las unidades del área y perímetro pueden variar según la escala de la imagen. Si no normalizas estas métricas, podrías obtener resultados confusos. Normaliza los valores utilizando el tamaño de la imagen o una constante predeterminada.
  1. Desconocer la precisión de arcLength: La función cv2.arcLength() puede devolver longitudes inexactas debido a la resolución de la imagen. Asegúrate de ajustar la precisión según tus necesidades y considera usar approxPolyDP() para obtener una aproximación más precisa.

Checklist accionable

  1. Verifica que tu imagen esté en escala de grises: Las funciones de OpenCV que utilizan contornos trabajan mejor con imágenes en escala de grises.
  2. Normaliza las áreas y perimetros: Asegúrate de normalizar estas métricas para compararlas correctamente entre diferentes imágenes o escalas.
  3. Ajusta los parámetros según la imagen: Las dimensiones y proporciones de las formas pueden variar significativamente. Ajusta los parámetros de cv2.findContours() según sea necesario.
  4. Usa approxPolyDP() para mejorar la precisión: Si necesitas una aproximación más precisa del contorno, considera usar esta función.
  5. Valida tus resultados manualmente: Verifica los resultados obtenidos con métodos visuales o herramientas de análisis adicionales.

Cierre: Siguientes pasos

  • Aprende a clasificar objetos basándose en características geométricas: Usa el área y perímetro para clasificar objetos en imágenes complejas.
  • Explora la detección de formas no convexas: Aprende a manejar contornos que no son necesariamente convexos, como espirales o formas irregulares.
  • Implementa validaciones adicionales: Asegúrate de validar tus resultados con más métricas y técnicas para mejorar la precisión del análisis.

Con estos conocimientos, estás listo para aplicar el análisis de área y perímetro a una amplia variedad de problemas en visión por computador.

Contacto

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