Operaciones Morfologicas
Las operaciones morfologicas modifican la forma de objetos en imagenes binarias (blanco/negro). Usan un kernel (elemento estructurante) que se desliza sobre la imagen.
Operaciones basicas: • Erosion: encoge objetos blancos, elimina ruido pequeno • Dilatacion: expande objetos blancos, rellena huecos pequenos • Opening (erosion + dilatacion): elimina ruido sin afectar mucho la forma • Closing (dilatacion + erosion): rellena huecos internos sin expandir • Gradient (dilatacion - erosion): extrae el contorno del objeto • Top Hat (original - opening): extrae detalles brillantes pequenos • Black Hat (closing - original): extrae detalles oscuros pequenos
import cv2
import numpy as np
img = cv2.imread("documento.jpg", cv2.IMREAD_GRAYSCALE)
_, binaria = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
# Elemento estructurante (kernel)
kernel_3 = np.ones((3, 3), np.uint8)
kernel_5 = np.ones((5, 5), np.uint8)
kernel_elipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
# Operaciones basicas
erosion = cv2.erode(binaria, kernel_3, iterations=1)
dilatacion = cv2.dilate(binaria, kernel_3, iterations=1)
# Operaciones compuestas con morphologyEx
opening = cv2.morphologyEx(binaria, cv2.MORPH_OPEN, kernel_5)
closing = cv2.morphologyEx(binaria, cv2.MORPH_CLOSE, kernel_5)
gradient = cv2.morphologyEx(binaria, cv2.MORPH_GRADIENT, kernel_3)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel_5)
# Caso practico: limpiar mascara de segmentacion
def limpiar_mascara(mask):
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))
# Opening: eliminar puntos blancos sueltos (ruido)
limpia = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
# Closing: rellenar agujeros dentro de objetos
limpia = cv2.morphologyEx(limpia, cv2.MORPH_CLOSE, kernel)
return limpia
# Separar objetos pegados
def separar_objetos(binaria):
dist = cv2.distanceTransform(binaria, cv2.DIST_L2, 5)
_, markers = cv2.threshold(dist, 0.5 * dist.max(), 255, 0)
return np.uint8(markers)
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