在Android中比较两张图片

10

在我的应用程序中,我想使用相机捕获两张图片,然后我想比较这些图片。

那么,我该如何比较这两张图片呢?

编辑: 比较第一张图片与第二张图片的像素完全相同。

谢谢。


什么是“比较”?你可以搜索形态相似性、颜色、频率等等。 - jose
4
除非你有一个魔法三脚架,否则这两个相机拍摄的图像在像素级别上是完全不匹配的。 - Paul-Jan
2
是的,@Paul-Jan是正确的。你应该考虑更好的方法来检测是否来自相同的视角和对象。也许你应该处理这两张图片,使用Kuawara滤波器http://rsbweb.nih.gov/ij/plugins/kuwahara.html。它可以去除噪声并保留边缘。 - jose
2个回答

7

1. 检查高度是否匹配,如果不匹配则返回false。然后,检查宽度是否匹配,如果不匹配,则返回false。然后检查每个像素,直到找到一个不匹配的像素,当你找到时,返回false。如果每个像素都匹配,则返回true。

伪代码:

bool imagesAreEqual(Image i1, Image i2)
{
    if (i1.getHeight() != i2.getHeight()) return false;
    if (i1.getWidth() != i2.getWidth()) return false;

    for (int y = 0; y < i1.getHeight(); ++y)
       for (int x = 0; x < i1.getWidth(); ++x)
            if (i1.getPixel(x, y) != i2.getPixel(x, y)) return false;

    return true;
}

实际上,如果可能的话,您可能希望将图像视为二维数组,并仅比较字节。我不知道Android图像API,但getPixel可能会很慢。
2.也许您可以将图像转换为byte64字符串,然后进行比较。
3.* * Android的OpenCV库:
有两个用于图像压缩的函数

**a. Core.absdiff() b. Core.compare()

有关更多详细信息,请参见比较两个图像

帖子上的评论指出了问题的一个根本性缺陷,但就这个答案而言,从概念上讲是正确的,但要使用getPixels而不是getPixel,因为它们在速度上会有显著的差异。 - kabuko
我已经在我的回答中提到,这种方法可能会很慢,以匹配像素到像素。 - ρяσѕρєя K
2
没问题,我只是指出了这个API,如果有人真的要走这条路,就可以使用它。 - kabuko

4

= API 12,这不是最好的答案。
- TeeTracker
@TeeTracker,最佳答案是什么? - Aliton Oliveira
看起来直接而简单。 - CrackerKSR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接