2012-03-19 85 views
8

在我的应用程序中,我想使用相机捕捉两个图像,然后我想比较这些图像。比较Android中的两个图像

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

编辑: 比较第一张图像是精确的第二张图像像素到像素。

谢谢。

+0

定义比较。 – 2012-03-19 18:03:40

+0

'比较'是什么?你可以搜索形态上的相似性,颜色,频率等等等等。 – jose 2012-03-19 18:05:34

+2

除非你有一个神奇的三脚架,否则这两个相机捕捉不会完全匹配像素到像素。 – 2012-03-19 18:08:11

回答

6

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. * * OpenCV进行的Android LIB:
必须功能的图像压缩

**一个。
Core.absdiff()b。Core.compare()

详细内容见comparing two images

+0

对帖子的评论指出了问题的根本缺陷,但就这个答案而言,从概念上讲它是正确的,但使用'getPixels'而不是'getPixel',因为它会有一个显着的速度差异。 – kabuko 2012-03-19 18:28:38

+0

kabuko我已经在我的回答中提到这种方法可能会很慢匹配像素到piexl – 2012-03-19 18:33:35

+0

是的,没关系。我只是指出要使用的API,如果有人真的走下这条路。 – kabuko 2012-03-19 18:36:39