El desenfoque es una operación de procesamiento de imágenes simple y de uso frecuente. También se le llama Suavizado. La biblioteca OpenCV proporciona muchas funciones para aplicar diversos filtros lineales para suavizar imágenes o desenfocar imágenes.
El suavizado de una imagen elimina los píxeles ruidosos de la imagen y aplica un filtro de paso bajo a una imagen. Un filtro de paso bajo significa eliminar el ruido de una imagen sin dañar la mayor parte de la imagen. El tipo de filtro más común es el lineal. En un filtro lineal, la suma ponderada del valor de los píxeles de entrada determina el valor de los píxeles de salida.
Las funciones de OpenCV que se pueden usar para desenfocar una imagen son las siguientes:
- difuminar()
- Desenfoque gaussiano()
- MedianBlur()
- filtro bilateral()
El tipo de retorno de las funciones anteriores es una imagen modificada del mismo directorio que se supone que debe tomarse como imagen de entrada de muestra. Todas las funciones descritas anteriormente son las siguientes
Método 1. Blur() : esta función realiza el suavizado utilizando un filtro de bloque normalizado.
Sintaxis:
Imgproc.blur(src, dst, new Size(i, i), new Point(-1, -1));
Parámetros: Esta función requiere 4 argumentos
- origen: imagen de origen
- dst: imagen de destino
- Tamaño (w, h): tamaño del kernel de ancho w píxeles y alto h píxeles
- Point(-1, -1): Indica la ubicación del punto de anclaje con respecto a la vecindad. El centro del núcleo se considera el punto de anclaje si hay un valor negativo.
Método 2. GaussianBlur() : esta función realiza el suavizado mediante un filtro gaussiano.
Sintaxis:
Imgproc.GaussianBlur(src, dst, new Size(i, i), 0, 0);
Parámetros: Esta función requiere 4 argumentos
- origen: imagen de origen
- dst: imagen de destino
- Tamaño (ancho, alto): el tamaño del núcleo que se utilizará. El tamaño se calculará utilizando los argumentos σx y σy si w y h no son números impares y positivos.
- σx, σy: La desviación estándar en x e y. Escribir 0 implica que σx y σy se calculan utilizando el tamaño del kernel.
Método 3. medianBlur() : esta función realiza el suavizado mediante un filtro de mediana.
Sintaxis:
Imgproc.medianBlur(src, dst, i);
Parámetros: Esta función requiere 3 argumentos
- origen: imagen de origen
- dst: imagen de destino
- i: Tamaño del núcleo. Debe ser extraño.
Método 4. BilateralFilter() : Esta función realiza el suavizado usando un filtro Bilateral.
Sintaxis:
Imgproc.bilateralFilter(src, dst, i, i * 2, i / 2);
Parámetros: Esta función requiere 5 argumentos
- origen: imagen de origen
- dst: imagen de destino
- d: El diámetro de cada vecindario de píxeles.
- σColor: Desviación estándar en el espacio de color.
- σEspacio: Desviación estándar en el espacio de coordenadas (en términos de píxeles)
Implementación: la imagen de entrada es la siguiente, que se supone que está borrosa.
Java
// Importing OpenCV libraries // to use inbuilt methods import org.opencv.core.*; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; class GFG { int DELAY_BLUR = 100; int MAX_KERNEL_LENGTH = 31; // Source Image by creating Matlab object Mat src = new Mat(); // Destination Image by creating Matlab object Mat dst = new Mat(); // Main driver code public static void main(String[] args) { // Load the native library System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Taking input image from directory String filename = "D:\\InputImage.jpg"; src = Imgcodecs.imread(filename, Imgcodecs.IMREAD_COLOR); // 4 different methods of Imgproc class // to blur out input image // Method 1. Standard blur method // using blur() for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { Imgproc.blur(src, dst, new Size(i, i), new Point(-1, -1)); // Display blurred input image displayDst(DELAY_BLUR); } // Method 2. Gaussian blur method // using GaussianBlur() for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { Imgproc.GaussianBlur(src, dst, new Size(i, i), 0, 0); // Display blurred input image displayDst(DELAY_BLUR); } // Method 3. Median blur method // using medianBlur() for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { Imgproc.medianBlur(src, dst, i); // Display blurred input image displayDst(DELAY_BLUR); } // Method 4. Bilateral filter Method // using bilateralFilter() for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) { Imgproc.bilateralFilter(src, dst, i, i * 2, i / 2); // Display blurred input image displayDst(DELAY_BLUR); } } }
Salida: La imagen de salida es una imagen borrosa de la imagen de entrada correspondiente:
Publicación traducida automáticamente
Artículo escrito por juhirajput004 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA