Procesar y Guardar una Imagen con OpenCV en Java

Procesar y Guardar una Imagen con OpenCV en Java

En este Articulo veremos como procesar y guardar una imagen con opencv en java a traves de algunas funciones para el procesamiento de imagenes para la aplicacion de filtros como grayscale, binario, blur, erosion de una imagen, dilatacion de una imagen, todo esto haciendo uso de la libreria opencv de vision por computadora. En articulos anteriores de OpenCV en java hemos visto como cargar y mostrar una imagen lo cual nos servira de base en este articulo para realizar el siguiente paso, que sera como hemos dicho, aplicar estos filtros a una imagen y poder guardarla a nuestro disco duro, asi que veamos pues como procesar y guardar una imagen con opencv en java, comencemos…

Requerimientos

Desarrollo

Como hemos visto en articulos anteriores somos capaces de cargar una imagen y mostrarla en una interfaz grafica, ahora veamos como procesarla, esto es, realizar algun cambio en la imagen original, y posteriormente como guardar los cambios en nuestro disco duro. En este Articulo damos por hecho que ya has cargado una imagen y la tienes guardada en un objeto de tipo Mat, sino sabes como hacerlo te recordamos…


imagen_original_mat = Highgui.imread(ruta_actual, 1);
[help]Si tienes problemas con realizar lo anterior te recomendamos darte una vuelta por los articulos anteriores.
[/help]Ahora, teniendo la imagen que queremos modificar vamos a revisar algunos codigos para procesarla, aplicaremos algunos diferentes filtros para esta imagen

Procesar y Guardar una Imagen con OpenCV en Java 1

  • Escala de Grises (grayscale)
  • Procesar y Guardar una Imagen con OpenCV en Java grayscale

    Este Filtro tan solo convierte una imagen de color en una imagen en escala de grises.


    ¿Sabías que?

    ¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

    Udemy

    
    Mat gris=new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type());
    Imgproc.cvtColor(imagen_original_mat, gris, Imgproc.COLOR_RGB2GRAY);
    establecerImagen(gris);
    
  • Binario
  • Procesar y Guardar una Imagen con OpenCV en Java binario

    En este filtro convertiremos la imagen original en otra en la que el color sera o blanco o negro, sin escalas, para lo cual primero necesitamos convertirla a grayscale.

    
    Mat gris=new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type());
    Mat binario = new Mat(imagen_original_mat.width(),imagen_original_mat.height(),imagen_original_mat.type());
    Imgproc.cvtColor(imagen_original_mat, gris, Imgproc.COLOR_RGB2GRAY);
    Imgproc.threshold(gris, binario, 100, 255, Imgproc.THRESH_BINARY);
    establecerImagen(binario);
    
  • Blur(desenfoque)
  • Procesar y Guardar una Imagen con OpenCV en Java blur

    Este efecto es el de desenfocar la imagen, poco que decir, solo que utilizamos el metodo medianblur en lugar de el blur tradicional o cualquier otro como el gaussianblur.

    
    Mat dst = imagen_original_mat.clone();
    Imgproc.medianBlur(imagen_original_mat, dst, 21);
    establecerImagen(dst);
    
  • Erosionar
  • Procesar y Guardar una Imagen con OpenCV en Java erosionar

    Este filtro puede ser definido como el proceso de «engordar» cada elemento.

    
    Mat dst = imagen_original_mat.clone();
    int erosion_size = 5;
    Size s = new Size(2*erosion_size + 1, 2*erosion_size+1);
    Point p = new Point(erosion_size, erosion_size);
    Mat element = Imgproc.getStructuringElement( Imgproc.MORPH_ELLIPSE,s,p);
    Imgproc.erode(imagen_original_mat, dst, element);
    establecerImagen(dst);
    
  • Dilatar
  • Procesar y Guardar una Imagen con OpenCV en Java dilatacion

    Este filtro puede ser definido como lo contrario de erosionar, consiste en «adelgazar» cada elemento.

    
    Mat dst = imagen_original_mat.clone();
    int dilatacion_size = 5;
    Size s = new Size(2*dilatacion_size + 1, 2*dilatacion_size+1);
    Point p = new Point(dilatacion_size, dilatacion_size);
    Mat element = Imgproc.getStructuringElement( Imgproc.MORPH_ELLIPSE,s,p);
    Imgproc.dilate(imagen_original_mat, dst, element);
    establecerImagen(dst);
    
    [note]El metodo «establecerImagen(dst)» es un metodo en el que la imagen resultante se coloca en algun componente de la interfaz grafica para ser mostrado al usuario, como puede ser un JLabel en el cual se coloca la imagen en su icono, como por ejemplo:

    
    private void establecerImagen(Mat img) {
    	if(img == null){
    		area_imagen.setIcon(null);
    	}else{
    		area_imagen.setIcon(new ImageIcon(util.convertir2Image(img).getScaledInstance(area_imagen.getWidth(), area_imagen.getHeight(), BufferedImage.SCALE_SMOOTH)));
    		imagen_actual_mat=img;
    	}
    	area_imagen.updateUI();
    }
    

    Donde area_imagen es ese JLabel en el que se establece un icono con la imagen resultante.
    [/note]

  • Guardar una Imagen Procesada a Disco
  • 
    Highgui.imwrite("procesada_"+nombre, imagen_actual_mat);
    

    Donde nombre es el nombre como quieres guardar la imagen con su extension, por ejemplo «imagen.jpg».

    Video

    Visto – Procesar y Guardar una Imagen con OpenCV en Java

    Clic para valorar esta información
    [Total: 0 Promedio: 0]