OpenCV (Open Source Computer Vision Library) está diseñada de manera modular, lo que facilita la organización de sus extensas capacidades de procesamiento de imágenes y visión artificial. Cada módulo agrupa herramientas específicas según su propósito funcional, desde estructuras de datos básicas hasta algoritmos complejos de procesamiento.
1. Módulo Core (core)
El módulo Core constituye el cimiento de la biblioteca. Define las estructuras de datos fundamentales y las operaciones aritméticas esenciales.
Estructuras de datos principales
La clase cv::Mat es la pieza central para el almacenamiento de matrices y representaciones de imágenes. A continuación, se presentan diversas formas de instanciar y manipular este objeto:
// 1. Instanciación de una matriz vacía
cv::Mat lienzo;
// 2. Carga de un archivo de imagen desde disco
cv::Mat entrada = cv::imread("foto.png");
// 3. Creación de una matriz con dimensiones y tipo específicos
// Ejemplo: 800x600 píxeles, 8 bits sin signo, 3 canales (Color)
int alto = 600;
int ancho = 800;
cv::Mat escena(alto, ancho, CV_8UC3, cv::Scalar(255, 0, 0)); // Fondo azul
// 4. Duplicación de datos
cv::Mat respaldo = escena.clone();
// 5. Creación a partir de un puntero de datos existente
unsigned char* buffer = new unsigned char[100 * 100];
cv::Mat matrizDesdeBuffer(100, 100, CV_8UC1, buffer);
Otras estructuras esenciales incluyen:
- Point: Representa coordenadas en un plano 2D (x, y). Ejemplo:
cv::Point origen(0, 0); - Scalar: Un vector de 4 elementos, comúnmente usado para definir colores en formato BGR (Blue, Green, Red).
- Rect: Define una región rectangular mediante coordenadas superiores izquierdas, ancho y alto.
Operaciones de conversión y acceso
El acceso a los píxeles se realiza mediante el método at<T>(), especificando el tipo de dato y las coordenadas:
// Acceso a un canal específico en una imagen a color
cv::Vec3b pixel = entrada.at<cv::Vec3b>(y, x);
uchar azul = pixel[0];
Para cambiar el espacio de color, se utiliza cv::cvtColor:
cv::Mat gris;
cv::cvtColor(entrada, gris, cv::COLOR_BGR2GRAY);
2. Módulo HighGUI
Este módulo provee una interfaz gráfica simplificada para la visualización de resutlados y la interacción básica con el usuario durante la etapa de desarrollo y depuración.
- Gestión de Ventanas:
cv::namedWindow()crea un contenedor visual, mientras quecv::imshow()proyecta la imagen en dicha ventana. - Entrada de Teclado:
cv::waitKey(delay)detiene la ejecución permitiendo visualizar la imagen y capturar eventos de teclado. - Interacción con Ratón: Mediante
cv::setMouseCallback(), es posible registrar funciones que respondan a clics o movimientos del puntero sobre la imagen.
3. Módulo de Procesamiento de Imágenes (imgproc)
El módulo ImgProc contiene la mayoría de los algoritmos de manipulación de bajo y medio nivel necesarios para la visión artificial.
Filtrado y Suavizado
Permite reducir el ruido o resaltar detalles mediente kernels específicos:
cv::GaussianBlur(): Suavizado basado en una distribución normal.cv::medianBlur(): Efectivo para eliminar ruido tipo "sal y pimienta".cv::bilateralFilter(): Reduce el ruido preservando los bordes nítidos.
Detección de Bordes y Formas
Algoritmos para extraer características estructurales de la escena:
- Canny: Detector de bordes multi-etapa altamente eficiente (
cv::Canny()). - Sobel/Scharr: Calculan derivadas espaciales para encontrar gradientes de intensidad.
- Hough Transform: Identifica geometrías paramétricas como líneas (
cv::HoughLines) y círculos (cv::HoughCircles).
Morfología Matemática
Operaciones basadas en la forma del objeto, útiles para la limpieza de máscaras binarias:
cv::Mat elementoEstructural = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
// Erosión para reducir ruido pequeño
cv::erode(mascara, salida, elementoEstructural);
// Dilatación para rellenar huecos
cv::dilate(mascara, salida, elementoEstructural);
Análisis de Contornos y Geometría
Funciones para segmentar y analizar objetos individuales:
cv::findContours(): Recupera las curvas que delimitan los objetos.cv::convexHull(): Calcula la envolvente convexa de un conjunto de puntos.cv::warpAffine()ycv::warpPerspective(): Realizan transofrmaciones geométricas como rotación, traslación y corrección de perspectiva.