Как сравнить два файла изображения попиксельно в питоне, используя селен? - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу сравнить два изображения (в формате .png) попиксельно, используя селен в python.Или как я могу сделать это, используя библиотеку подушек.

У меня есть базовое изображение, и я получаю изображение сравнения, сделав снимок экрана с веб-страницей.Я хочу сравнить эти два изображения и утверждать, что они равны.как я могу это сделать.

Ниже я попробовал:

def assert_images_are_equal(base_image, compare_image):
    with open(base_image, 'rb') as f1, open(compare_image, 'rb') as f2:
        base_image_contents = f1.read()
        compare_image_contents = f2.read()
    assert base_image_contents == compare_image_contents

Но это не всегда работает.Я хочу сравнить пиксель за пикселем.Может ли кто-нибудь помочь мне с этим, используя библиотеку подушек или любую другую библиотеку, кроме PIL?спасибо.

1 Ответ

0 голосов
/ 26 сентября 2019

Довольно сложно сказать, являются ли 2 изображения одинаковыми или похожими, потому что это зависит от ваших определений "одинаковый" и "сходный" .

  • Вы можете сделать сплошное красное изображение, сохранить его в формате PNG, а затем снова сохранить точно такое же изображение, и оно может отличаться, поскольку формат PNG содержит временную метку в заголовке изображения, которая может быть помечена какследующая секунда между сохранениями.

  • Вы можете создать сплошной красный PNG-файл с глубиной 8 бит, а другой - с глубиной 16 бит, и вы не сможете увидеть разницу, кромеданные будут сильно отличаться.

  • Вы можете создать файл TIF в порядке байтов Motorola и тот же файл в порядке байтов Intel.Визуально и в расчетах они будут неразличимы, но файлы будут сильно различаться.

  • Вы можете создать GIF-файл красного цвета, который будет выглядеть ничем не хуже PNG-файла.но файлы будут отличаться.

  • Вы можете сделать изображение палитры и изображение истинного цвета, и пиксели будут сильно отличаться, но они будут выглядеть одинаково.

  • Вы можете сделать простое черное изображение с белым прямоугольником посередине и написать его, используя одну библиотеку JPEG, и оно будет отличаться от того же изображения, записанного в другой библиотеке JPEG, или даже в другой версии выпуска.та же библиотека.

Есть еще много случаев ...

Еще одна полезная заметка, вы можете посмотреть на Перцептивное хеширование который говорит вам, если изображения выглядят очень похоже.Одна из библиотек, которая выполняет перцептивное хеширование, - ImageMagick и имеет привязку Python здесь и здесь .

...