我想过滤掉2张图片之间的区别(截图)。 不幸的是,我完全没有Java和图像的经验,也不知道该寻找什么。
是否有即用型课程?
我期待的是:
Image imgA = new (pathToA); // Image with for instance 500kb
Image imgB = new (pathToB); // Image with for instance 500kb
Image imgC = ImageFilter.filterDifference(imgA, imgB); // Only the difference between imgA and imgB and therefore for instance 20kb
修改
示例:无论如何,我的意思是差异是图像之间的视觉差异(截图)。如果我在一个文件夹中有一个带有5个图标的屏幕截图,然后再用1个图标做另一个屏幕截图,那么我希望imgC只显示这个新图标。
编辑2:
澄清:我只想要新图片中2个截图的区别。
编辑3:
某些代码看起来像这样(代码不起作用):
private BufferedImage getImageDifference(BufferedImage img1, BufferedImage img2) {
if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
BufferedImage img3 = new BufferedImage(img1.getHeight(), img1.getWidth(), img1.getType());
for (int x = 0; x < img1.getWidth(); x++) {
for (int y = 0; y < img1.getHeight(); y++) {
if (img1.getRGB(x, y) != img2.getRGB(x, y))
//return false;
img3.setRGB(x, y, img2.getRGB(x, y));
}
return img3;
}
} else {
return false;
}
}
答案 0 :(得分:1)
由于您对截图感兴趣,因此可以预期差异图像将是最小的。这通常适用于较小的时间间隔,但对于较大的时间间隔则非常不确定。想象一下使用某个应用程序时的桌面,并在几秒钟内继续使用相同的应用程序,另一方面使用不同的应用程序。这部分解释了我猜你为图像提供的文件大小。差异图像可以保存为灰度格式。
我不知道是否有一些现成的库。我建议将这个(简单)方法作为一个重点:
我猜不是特定于java的解决方案。如果您不知道,可以开始阅读BufferedImage
例如