Hola tengo la necesidad de comparar 2 imágenes pixel a pixel.
Se me ocurre que las podrías transformar en texto y de ahi compararlas quizas usando un buffer.
Puedes leer la imagen en un arreglo de bytes y después comparar los arreglos:
Sin embargo creo que una comparación pixel por pixel es demasiado estricta. Hay algoritmos que pueden comparar imagenes con muchas más diferencias y aún así detectar similitudes.
Solucionado pongo un trozo de código.
System.out.println("["+x+","+y+"]"); } } } //System.out.println(arraypos.size()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return arraypos; } }
Y si las transformas en texto
Se me ocurre que las podrías transformar en texto y de ahi compararlas quizas usando un buffer.
Puedes leer la imagen en un
Puedes leer la imagen en un arreglo de bytes y después comparar los arreglos:
Files.readAllBytes(new File("imagenUno.jpg"),
Files.readAllBytes(new File("imagenDos.jpg"))
);
Sin embargo creo que una comparación pixel por pixel es demasiado estricta. Hay algoritmos que pueden comparar imagenes con muchas más diferencias y aún así detectar similitudes.
Solucionado.
Solucionado pongo un trozo de código.
ArrayList<Pos> arraypos = new ArrayList<Pos>();
File input1 = new File(pic1);
File input2 = new File(pic2);
try {
image1 = ImageIO.read(input1);
image2 = ImageIO.read(input2);
width = image1.getWidth();
height = image1.getHeight();
System.out.println("[x,y]");
for(int y=0; y<height;y++){
for(int x=0; x<width;x++){
Color c =new Color(image1.getRGB(x, y));
Color z = new Color(image2.getRGB(x, y));
if(!c.equals(z)){
Pos pos = new Pos();
arraypos.add(pos);
System.out.println("["+x+","+y+"]");
}
}
}
//System.out.println(arraypos.size());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arraypos;
}
}