Есть ли более быстрый способ оценить, отличаются ли две картинки? - PullRequest
1 голос
/ 17 января 2020

Я использую его, чтобы сказать, отличается ли сейчас скриншот от последнего скриншота. Теперь я использую

    with open('last_screenshot.bmp','rb+') as f:
        org = f.read()
    with open('now_screenshot.bmp','rb+') as f:
        new = f.read()
    if(org==new):
        print("The pictures are same")

Есть ли более быстрый способ сделать это? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 17 января 2020

Вы не получите нигде, сравнивая пиксели. Ваши варианты:

  1. извлечение объектов с использованием дескриптора (HOG, SIFT, SURF, ORB), сопоставление их, просмотр количества совпадений; пример
  2. вычислить хэши, вычислить метрику Хэмминга c вот пример
  3. взять предварительно подготовленного устройства для внедрения; когда дело доходит до изображений, это довольно просто, просто активируйте предпоследний слой; это может быть начало, vgg et c
0 голосов
/ 17 января 2020

Вы можете использовать filecmp.cmp(..., shallow=False), который поставляется со стандартной библиотекой. Это не приведет к считыванию целых файлов в память, но вместо этого прочитает их в виде фрагментов и произойдет короткое замыкание при обнаружении другого фрагмента. Пример использования:

import filecmp

if filecmp('last_screenshot.bmp', 'now_screenshot.bmp', shallow=False):
    print('Files compare equal')
0 голосов
/ 17 января 2020

Что ж, вы можете итерировать файлы по частям вместо чтения всего содержимого в памяти.

В качестве альтернативы, используйте filecmp или оболочки cmp (1) .

...