过滤2张图片之间的差异?

时间:2014-12-16 07:03:04

标签: java image image-manipulation

我想过滤掉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;
    }
}

1 个答案:

答案 0 :(得分:1)

由于您对截图感兴趣,因此可以预期差异图像将是最小的。这通常适用于较小的时间间隔,但对于较大的时间间隔则非常不确定。想象一下使用某个应用程序时的桌面,并在几秒钟内继续使用相同的应用程序,另一方面使用不同的应用程序。这部分解释了我猜你为图像提供的文件大小。差异图像可以保存为灰度格式。

我不知道是否有一些现成的库。我建议将这个(简单)方法作为一个重点:

  1. 只需减去两张图片
  2. 即可
  3. 阈值差异图片:
  4. a)仅保留高于某个值的差异。
  5. b)仅保留那些具有一定数量的相邻像素的区域不同(这可能会遗漏任何可能与噪声隔离的像素)
  6. 您可以根据需要进一步处理差异图像。
  7. 我猜不是特定于java的解决方案。如果您不知道,可以开始阅读BufferedImage例如