код python для сравнения изображений в python

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

3 ответов


существуют следующие способы сделать правильное сравнение.

  • первое-это Корень-Среднее-Квадрат Разница #

чтобы получить меру того, насколько похожи два изображения, вы можете рассчитать среднеквадратическое (RMS) значение разницы между изображениями. Если изображения абсолютно идентичны, это значение равно нулю. Следующая функция использует разностную функцию, а затем вычисляет значение RMS из гистограммы результирующего изображение.

# Example: File: imagediff.py

import ImageChops
import math, operator

def rmsdiff(im1, im2):
    "Calculate the root-mean-square difference between two images"

    h = ImageChops.difference(im1, im2).histogram()

    # calculate rms
    return math.sqrt(reduce(operator.add,
        map(lambda h, i: h*(i**2), h, range(256))
    ) / (float(im1.size[0]) * im1.size[1]))
  • другое Точное Сравнение #

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

import ImageChops

def equal(im1, im2):
    return ImageChops.difference(im1, im2).getbbox() is None

Я поддерживаю библиотеку Python под названием pyssim использует структурированное сходство (SSIM) метод сравнения двух изображений.

у него Нет привязок python, но perceptualdiff программа также удивительна при сравнении двух изображений - и довольно быстро.


Я не могу дать готовый ответ, но я не буду указывать вам (я думаю) в правильном направлении. Простой способ сравнения двух изображений - сделать хэш их двоичных представлений, а затем посмотреть, совпадают ли эти хэши. Одна из проблем с этим связана с хэш-функцией, которую вы хотите использовать, и вы должны искать ту, которая имеет низкие шансы на столкновения, а другая заключается в том, что файл изображения, вероятно, имеет метаданные, прикрепленные к исходной двоичной информации, поэтому вам придется посмотреть, как отключите эти метаданные, чтобы сравнить изображения только с использованием их двоичной информации. Кроме того, я не знаю наверняка, но, вероятно, двоичное представление изображения, закодированного в jpg, отличается от изображения, закодированного в png, поэтому вы должны знать об этом.