Để so sánh hai hình ảnh:
- Đọc cả hai bằng phương thức ImageIO.read().
- Lấy chiều cao và chiều rộng của cả hai để đảm bảo chúng bằng nhau.
- Lấy giá trị pixel và lấy giá trị RGB của cả hai hình ảnh.
- Tính tổng hiệu giữa các giá trị RGB của hai hình ảnh.
- Tính phần trăm khác biệt bằng công thức:
Average = difference / (width * height * 3);
Percentage = (Average / 255) * 100;
Ví dụ
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
public class ComparingImages {
public static void main(String[] args) throws Exception {
BufferedImage img1 = ImageIO.read(new File("D:\\Images\\test1.jpg"));
BufferedImage img2 = ImageIO.read(new File("D:\\Images\\test2.jpg"));
int w1 = img1.getWidth();
int w2 = img2.getWidth();
int h1 = img1.getHeight();
int h2 = img2.getHeight();
if ((w1 != w2) || (h1 != h2)) {
System.out.println("Cả hai hình ảnh phải có cùng kích thước");
} else {
long diff = 0;
for (int j = 0; j < h1; j++) {
for (int i = 0; i < w1; i++) {
// Lấy giá trị RGB của một pixel
int pixel1 = img1.getRGB(i, j);
Color color1 = new Color(pixel1, true);
int r1 = color1.getRed();
int g1 = color1.getGreen();
int b1 = color1.getBlue();
int pixel2 = img2.getRGB(i, j);
Color color2 = new Color(pixel2, true);
int r2 = color2.getRed();
int g2 = color2.getGreen();
int b2 = color2.getBlue();
// Tổng hiệu của các giá trị RGB của hai hình ảnh
long data = Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);
diff = diff + data;
}
}
double avg = diff / (w1 * h1 * 3);
double percentage = (avg / 255) * 100;
System.out.println("Khác biệt: " + percentage);
}
}
}
Ảnh đầu vào 1

Ảnh đầu vào 2

Kết quả
Khác biệt: 92.54901960784314