画象diff

単純にRGB値の差分を出力します。

単純にRGB値の差分を出力します。

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageDiff {
//
public static final String INPUT1 = "data/input1.jpg";
public static final String INPUT2 = "data/input2.jpg";
//
public static final String OUTPUT = "data/output.jpg";
//
private static BufferedImage image1;
private static BufferedImage image2;
private static BufferedImage output;
public static void main(String[] args) {
loadImage();
doProcess();
saveImage();
}
/**
*
*/
private static void doProcess() {
int width = Math.max(image1.getWidth(), image2.getWidth());
int height = Math.max(image1.getHeight(), image2.getHeight());
output = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int rgb1;
if ((x <= image1.getWidth()) && (y <=image1.getHeight())) {
rgb1 = image1.getRGB(x, y);
} else {
rgb1 = 0;
}
int rgb2;
if ((x <= image2.getWidth()) && (y <=image2.getHeight())) {
rgb2 = image2.getRGB(x, y);
} else {
rgb2 = 0;
}
int diff = rgb1 - rgb2;
output.setRGB(x, y, diff);
}
}
}
/**
*
*/
private static void loadImage() {
try {
image1 = ImageIO.read(new File(INPUT1));
image2 = ImageIO.read(new File(INPUT2));
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
/**
*
*/
private static void saveImage() {
try {
ImageIO.write(output, "jpg", new File(OUTPUT));
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX