Procesamiento de imágenes en OpenCV

Con OpenCV contamos con diferentes funciones que nos permiten procesar las imágenes de entrada, ya sea para resaltar o descartar zonas de la misma para su posterior análisis o simplemente si deseamos transformar la imagen original para mejorar el color, añadir un efecto, mesclar la imagen, etc., en este tutorial veremos algunas de estas funciones y aprenderemos a utilizarlas.

En la primera parte veremos algunos filtros creados por nosotros en distintos tutoriales, luego veremos algunas funciones incluidas en la biblioteca.

Pixelar una imagen

Para lograr el efecto pixelado de una imagen analizaremos cada uno de los píxeles que componen la imagen y calculamos el valor promedio de los píxeles vecinos, para esto no utilizaremos una función OpenCV, creamos nuestra propia implementación, si deseas más detalles del algoritmo visita: pixelar una imagen con OpenCV.

pixelar-imagen

Filtro Twirl

Este es un filtro que aplica una transformación 2D a la posición de cada uno de los píxeles de la imagen, este es otro de los filtros creados en nuestros tutoriales, puedes verlo en: OpenCV filtro twirl, nuestro algoritmo nos permite variar el ángulo para obtener resultados diferentes, la salida sería:

twirl-opencv

Acentuar color

Usaremos este filtro cuando deseemos resaltar un área de un color en especifico, las áreas de la imagen que nos estén en el rango de color indicado se convertirán a escala de grises, de esta manera logramos resaltar solo aquellas áreas que estén pintadas con el color indicado, más información en: resaltar color con OpenCV.

resaltar o acentuar color con OpenCV

Ahora veremos un grupo de funciones proporcionadas por OpenCV que nos facilitarán el procesamiento y análisis de imágenes, mencionaremos la función, los parámetros que requiere la misma y daremos un ejemplo del resultado que obtendremos al aplicar el correspondiente algoritmo.

GaussianBlur

GaussianBlur(img, dst, Size(13,7), 8);

Esta función la usamos para aplicar un blur a una imagen utilizando un filtro gaussiano, los parámetros requeridos son:

  1. img: imagen original.
  2. dst: matriz donde se almacenara la nueva imagen.
  3. Size(width, height): tamaño del kernel, deben ser positivos e impares.
  4. 8: desviación estándar en el eje X.
gaussianblur

MedianBlur

cv::medianBlur(img, dst, 5);

Aplica un blur a la imagen indicada usando el filtro de mediana, los parámetros para esta función son:

  1. img: imagen original o de entrada.
  2. dst: objeto Mat donde guardaremos la salida.
  3. 5: tamaño del kernel (ksize) debe ser mayor que 1 e impar.

medianblur

Erode y Dilate

cv::erode(img, dst, krl);
cv::dilate(img, dst, krl);

Estos son funciones que aplican las operaciones morfológicas de erosión y dilatación respectivamente, normalmente son usadas sobre imágenes binarias, pero también se pueden utilizar en imágenes a color como en el siguiente ejemplo:

erode

dilate

Puedes ver más información sobre las operaciones morfológicas de erosión, dilatación, apertura, cierre y otras, además de sus aplicaciones en el tutorial: Operaciones morfológicas en OpenCV.

Canny (Detección de bordes)

cv::Canny(src, dst, t1, t2);

Esta y otras funciones proporcionadas por la biblioteca nos permiten detectar los bordes o contornos de una imagen, el resultado se almacena en una imagen binaria.

  1. src: imagen de entrada.
  2. dst: imagen de salida , será una imagen de un canal de 8 bits.
  3. t1, t2: son los valores de tolerancia, nos ayudan a limitar los bordes detectados.

canny

Guardar una imagen

Una vez hemos procesado la imagen tal vez nos interese guardar en disco una copia de la imagen procesada, OpenCV nos proporciona la función cv::imwrite() para almacenar una imagen en un archivo indicado, disponemos de distintos formatos como JPG, PNG, TIFF.

vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);

imwrite("imagen.png", dst, compression_params);

De momento terminamos aquí, debemos mencionar que existen muchas otras funciones que podemos utilizar solo debemos explorar y probar que hace cada una de ellas.

Siguiente tutorial: Capturar imágenes de la webcam con OpenCV

Comentarios

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Muy buenos tutoriales, actualmente trabajando con la versión 2.4.13 y me han sido de mucha ayuda, saludos.

    ResponderEliminar
  3. Buen día. Alguien ha intentado procesar imágenes satelitales con openCV y c++? Tengo múltiples problemas por el tipo de dato single.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Acceso a la webcam con OpenCV

JavaFx 8 Administrar ventanas

Analizador Léxico