Procesamiento de imagenes
El preprocesamiento es fundamental antes de cualquier analisis. Las imagenes "crudas" tienen ruido, iluminacion irregular y detalles irrelevantes.
Operaciones basicas:
• Resize: Cambiar tamano (para modelos que requieren input fijo) • Blur/Smooth: Suavizar para reducir ruido (Gaussian, Median, Bilateral) • Threshold: Convertir a blanco/negro segun un umbral • Edge Detection: Encontrar bordes (Canny, Sobel, Laplacian) • Morphology: Erosion, dilatacion, opening, closing • Color spaces: BGR → HSV (para segmentar colores), BGR → LAB • ROI (Region of Interest): Recortar la parte relevante
Pipeline tipico: 1. Cargar imagen 2. Resize a tamano estandar 3. Convertir a gris (si no necesitas color) 4. Aplicar blur para reducir ruido 5. Aplicar threshold o edge detection 6. Encontrar contornos 7. Analizar/clasificar
import cv2
import numpy as np
def process_image(img):
"""Pipeline de procesamiento completo"""
# 1. Resize
resized = cv2.resize(img, (640, 480))
# 2. Convertir a gris
gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
# 3. Blur para reducir ruido
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 4. Deteccion de bordes (Canny)
edges = cv2.Canny(blurred, 50, 150)
# 5. Encontrar contornos
contours, _ = cv2.findContours(
edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
)
# 6. Dibujar contornos
result = resized.copy()
cv2.drawContours(result, contours, -1, (0, 255, 0), 2)
print(f"Contornos encontrados: {len(contours)}")
return result, contours
def segment_color(img, lower_hsv, upper_hsv):
"""Segmentar objetos por color usando HSV"""
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_hsv, upper_hsv)
# Limpiar mascara
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
# Aplicar mascara a imagen original
result = cv2.bitwise_and(img, img, mask=mask)
return result, mask
# Ejemplo: detectar objetos rojos
# lower_red = np.array([0, 100, 100])
# upper_red = np.array([10, 255, 255])
# result, mask = segment_color(img, lower_red, upper_red)
Practica esta lección
Resuelve los ejercicios del curso de Computer Vision con Python en la app, gratis y con corrección automática.
Empezar a practicar