2012-03-19 84 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