2012-03-29 17 views
0

私は画像比較は期待通りに動作しない

iはPythonスクリプトを、次のことを行う上で、実際の対LinuxのXスクリーンショット画像との画像比較を実行しようとしてい

http://aatiis.me/2010/08/12/fast-image-comparison-with-python.html

それをテストに使用したサンプルダックイメージ(snap_from_x_duck enter image description hereおよびresized_from_duck enter image description here)の出力を出力しますが、実際のイメージ(snap_from_x.png enter image description hereおよびresized_from_org.png enter image description here)をロードすると、エラーが発生します。

Comparing 1 images: 
* 1/1: /opt/ad_re.png /opt/op.png ... 
Traceback (most recent call last): 
    File "imgcmp.py", line 246, in <module> 
     sim = cmp.similarity() 
    File "imgcmp.py", line 212, in similarity 
     cmp = self.compare() 
    File "imgcmp.py", line 180, in compare 
     diff.append(cmp.levenshtein) 
    File "imgcmp.py", line 127, in levenshtein 
     stra_r = ''.join((chr(x>>16) for x in self.imga_int)) 
    File "imgcmp.py", line 50, in imga_int 
     self._imga_int = tuple(self._img_int(self._imga)) 
    File "imgcmp.py", line 120, in _img_int 
     yield pixel[0] | (pixel[1]<<8) | (pixel[2]<<16) 
TypeError: 'int' object is unsubscriptable 

完全に(非常に)可能性が高いレシピが唯一のRGB画像で動作するように作られていることがあり、何が起こっているかTHIS

+0

pixel'がintである 'のように見えます。より多くのコード、つまり '_img_int 'を投稿してください。あるいは、代わりにデバッガを実行することもできます。 –

答えて

5

にいくつかの助けを必要と混乱して - と、あなたのイメージがパレットバージョンです1ピクセルあたり1バイトしかない(したがって、画像のピクセルはRGB値の繰り返しではなく、単一バイトです)。

このためのソリューションは、あなたの比較関数を呼び出す前にRGBにあなたのイメージを変換することである - ちょうどん:

img = img.convert("RGB")

+0

私はあなたのソリューションを試してみる前に、これを奇妙なことから試してみると、同じコードがダック画像のために機能しました。 – Ragav

関連する問題