Сравнение 2х очень похожих изображений
Пытался сравнивать с помощью imagehash, но в случае с некоторыми похожими изображениями картинки были разные, а хеш почему-то один. В foundImage попадает картинка, после чего я вырезаю кусок для проверки и сравниваю с кусками которые у меня есть в папке с помощью imagehash, если куска нет то он сохраняется. Какие есть лаконичные варианты проверить 2 картинки? Перерыл интернет, не нашел толковых примеров.
def foundImage(img):
img = Image.open(img)#Картинка
area = (50, 50, 100, 100)#Параметры обрезки картинки
cropped_img = img.crop(area)#Обрезаем картинку
hash = imagehash.average_hash(cropped_img)
for file in glob.glob('res/*.png'):
oldHash = imagehash.average_hash(Image.open(file))
if hash == oldHash:
return(file)#name arena
randomName = ''.join([random.choice(list('123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM')) for x in range(12)])
cropped_img.save('res/' + randomName + 'greenNO.png')#Сохраняем
return 0
Ответы (1 шт):
Из комментария автора поста:
черное изображение стало красным, и при сравнении красного с черным оно решает что hash == oldHash true.
При этом в описании библиотеки ImageHash написано:
The image hash algorithms (average, perception, difference, wavelet) analyse the image structure on luminence (without color information). The color hash algorithm analyses the color distribution and black & gray fractions (without position information).
Таким образом, использованная функция average_hash просто игнорирует цветовые составляющие картинки, она учитывает только яркость пикселов. Если нужно учитывать именно цвет картинки, то можно использовать функцию colorhash, которая учитывает распределение цветовых составляющих (но не учитывает позиции пикселов).