Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách so sánh hai hình ảnh bằng Java OpenCV


Để so sánh hai hình ảnh:

  1. Đọc cả hai bằng phương thức ImageIO.read().
  2. Lấy chiều cao và chiều rộng của cả hai để đảm bảo chúng bằng nhau.
  3. Lấy giá trị pixel và lấy giá trị RGB của cả hai hình ảnh.
  4. Tính tổng hiệu giữa các giá trị RGB của hai hình ảnh.
  5. 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

Cách so sánh hai hình ảnh bằng Java OpenCV

Ảnh đầu vào 2

Cách so sánh hai hình ảnh bằng Java OpenCV

Kết quả

Khác biệt: 92.54901960784314