En este Articulo veremos como mezclar 2 imagenes en Java con OpenCV, lo haremos mediante el metodo addWeighted de OpenCV el cual nos permite fusionar dos imagenes aplicando valores alfa y beta para despues guardar el resultado un una imagen. Mostraremos el resultado en una interfaz a traves de SWING, el trabajo fue realizado utilizando Netbeans.
Requerimientos
Para comenzar a mezclar imagenes en java con OpenCV necesitamos saber algunas cosas antes.
- Las imagenes deben tener el mismo tamaño.
- Las imagenes deben ser del mismo formato.
Nuestro Proyecto constara de 2 clases, una que realizara el proceso de lectura-procesamiento de las imagenes y otra que se encargara de mostrar en ventana la imagen resultante.




¿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
Ahora vamos al codigo.
[note]Damos por hecho que tiene configurado todo para poder hacer uso de las funciones de OpenCV, sino date una vuelta por el blog para hacerlo.[/note]
Main
public class Main {
static double alfa=0.5,beta;
static Mat src1,src2,dst;
static URL img1_url,img2_url;
static String ruta1="/ruta/a/tuimagen/paisaje1.jpg",
ruta2="/ruta/a/tuimagen/paisaje2.jpg";
public static void main(String args[]){
System.out.println(Core.NATIVE_LIBRARY_NAME);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
src1 = Highgui.imread(ruta1,Highgui.CV_LOAD_IMAGE_COLOR);
src2 = Highgui.imread(ruta2,Highgui.CV_LOAD_IMAGE_COLOR);
if( src1.empty() ) { System.out.println("Error Cargando imagen1 n");}
if( src2.empty() ) { System.out.println("Error Cargando imagen2 n");}
dst = new Mat();
beta = 1.0 - alfa;
Core.addWeighted(src1, alfa, src2, beta, 0.0, dst);
//Interfaz Grafica
Ventana v = new Ventana();
//Establecemos Imagen
v.setImage(convertir(dst));
}
private static Image convertir(Mat imagen) {
MatOfByte matOfByte = new MatOfByte();
Highgui.imencode(".jpg", imagen, matOfByte);
byte[] byteArray = matOfByte.toArray();
BufferedImage bufImage = null;
try {
InputStream in = new ByteArrayInputStream(byteArray);
bufImage = ImageIO.read(in);
} catch (Exception e) {
e.printStackTrace();
}
return (Image)bufImage;
}
}
Ventana
public class Ventana extends JFrame{
JPanel panel;
JLabel etiqueta;
public Ventana(){
setTitle("Mezclar Imagenes en Java con OpenCV");
setLocation(400, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(600,400);
setResizable(true);
setVisible(true);
panel = new JPanel();
panel.setLayout(new BorderLayout());
etiqueta = new JLabel();
panel.add(etiqueta);
getContentPane().add(panel);
}
public void setImage(Image imagen){
panel.removeAll();
ImageIcon icon = new ImageIcon(imagen.getScaledInstance(etiqueta.getWidth(), etiqueta.getHeight(), Image.SCALE_SMOOTH));
etiqueta.setIcon(icon);
panel.add(etiqueta);
panel.updateUI();
}
}

0 Comentarios