Сравнение изображений с PIL не работает должным образом - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь сравнить изображение с linux x снимком экрана и фактическим при этом

я следую скрипту python

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

это работаети доставляет вывод для образца изображения утки (snap_from_x_duck enter image description here AND 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

ЭТО ОЧЕРЕДЬ ПОЛНОСТЬЮ ТРЕБУЕТ НЕСКОЛЬКО ПОМОЩЬ НА ЭТОМ

1 Ответ

5 голосов
/ 29 марта 2012

То, что (очень) вероятно происходит, заключается в том, что рецепт создан для работы только с изображениями RGB - и ваше изображение представляет собой палитру, только 1 байт на пиксель (таким образом, пиксель для изображения - одинбайт, не итерируемый со значениями RGB).

Решением для этого является преобразование ваших изображений в RGB перед вызовом функции сравнения - просто сделайте:

...