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
- Como instalar y configurar OpenCV en Windows
- Como cargar y mostrar una imagen con opencv en java y Netbeans
- Documentacion OpenCV (Ingles)(C++)
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


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

¿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);

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);

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);

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);

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]
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
24 Comentarios