Jump to content

Percentage difference between images: Difference between revisions

→‎{{header|Java}}: restructure code to be reusable
(→‎{{header|Java}}: restructure code to be reusable)
Line 735:
 
<lang java>import java.awt.image.BufferedImage;
import javaxjava.imageioio.ImageIOFile;
import java.io.IOException;
import javajavax.netimageio.URLImageIO;
 
public classenum ImgDiffPercent {
};
{
 
public static void main(String args[] args) throws IOException {
{
URL url2 = new// URL("httphttps://rosettacode.org/mw/images/b3/b63c/Lenna100Lenna50.jpg");
BufferedImage img1 = null;
// https://rosettacode.org/mw/images/b/b6/Lenna100.jpg
BufferedImage img2 = null;
BufferedImage img1 = ImageIO.read(new File("Lenna50.jpg"));
try {
URL url1 BufferedImage img2 = ImageIO.read(new URLFile("http://rosettacode.org/mw/images/3/3c/Lenna50Lenna100.jpg"));
 
URL url2 = new URL("http://rosettacode.org/mw/images/b/b6/Lenna100.jpg");
img1 double p = ImageIO.readgetDifferencePercent(url1img1, img2);
img2 = ImageIOSystem.readout.println(url2"diff percent: " + p);
} catch (IOException e) {
e.printStackTrace();
}
 
int width1 = img1.getWidth(null);
private static double getDifferencePercent(BufferedImage img1, BufferedImage img2) {
int width2 = img2.getWidth(null);
int height1width = img1.getHeightgetWidth(null);
int height2height = img2img1.getHeight(null);
if ((width1 != width2) ||int (height1width2 != height2img2.getWidth()) {;
int width2height2 = img2.getWidthgetHeight(null);
System.err.println("Error: Images dimensions mismatch");
if (width != width2 || height != height2) {
System.exit(1);
throw new IllegalArgumentException(String.format("Images must have the same dimensions: (%d,%d) vs. (%d,%d)", width, height, width2, height2));
try { }
 
long diff = 0;
for (int xy = 0; xy < width1height; xy++) {
for (int x = 0; x < width; x++) {
diff += pixelDiff(img1.getRGB(x, y), img2.getRGB(x, y));
}
}
long maxDiff = 3L * 255 * width * height;
 
return 100.0 * diff / maxDiff;
}
 
long diff = 0;
forprivate static int pixelDiff(int yrgb1, = 0; y < height1;int y++rgb2) {
for (int x = 0; x < width1; x++) {
int rgb1 = img1.getRGB(x, y);
int rgb2 = img2.getRGB(x, y);
int r1 = (rgb1 >> 16) & 0xff;
int g1 = (rgb1 >> 8) & 0xff;
int b1 = ( rgb1 ) & 0xff;
int r2 = (rgb2 >> 16) & 0xff;
int g2 = (rgb2 >> 8) & 0xff;
int b2 = ( rgb2 ) & 0xff;
diff +=return Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);
diff += Math.abs(g1 - g2);
diff += Math.abs(b1 - b2);
}
}
double n = width1 * height1 * 3;
double p = diff / n / 255.0;
System.out.println("diff percent: " + (p * 100.0));
}
}</lang>
 
Cookies help us deliver our services. By using our services, you agree to our use of cookies.