ibr_98
@ibr_98

Каким образом можно сравнить две картинки?

Всем привет!
Допустим есть две одинаковые картинки, мне нужно, чтобы программа определяла, это одна и та же картинка или нет, помогите плиз.
  • Вопрос задан
  • 897 просмотров
Решения вопроса 1
delvin-fil
@delvin-fil
Crazy Linux-admin
Попробуйте так:
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw

image1 = Image.open("1.jpg")
image2 = Image.open("2.jpg")
ANS = Image.open("1.jpg") 
draw = ImageDraw.Draw(ANS)
pix1 = image1.load()
pix2 = image2.load()
width = min(image1.size[0], image2.size[0])
height = min(image1.size[1], image2.size[1])
eps = 30
for i in range(width):
	for j in range(height):
		dx1 = pix1[i, j][0] - pix2[i, j][0]
		dx2 = pix1[i, j][1] - pix2[i, j][1]
		dx3 = pix1[i, j][2] - pix2[i, j][2]
		draw.point((i, j), (abs(dx1), abs(dx2), abs(dx3))) # Зарисовываем ответ разницей пикселов наших картинок по модулю.
ANS.save("ans.jpg", "JPEG")
del draw
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Есть модуль imagehash - он позволяет считать хеши картинок и сравнивать их между собой. Будет работать даже если изображения разных размеров.

from PIL import Image
from imagehash import dhash

image1 = dhash(Image.open('1.png'))
image2 = dhash(Image.open('2.png'))

if image1 == image2:
    # делаем что-то с одинаковыми фотографиями
Ответ написан
Комментировать
GavriKos
@GavriKos
Зависит от того, КАК вам надо сравнивать картинки.
Самый простой вариант - переводите в BMP и попиксельно сравниваете. С большой долей вероятности - мало картинок будут одинаковыми, даже если на них изображено одно и то же (например, разные компрессии jpeg). Можно этот метод улучшить - делать допуски при сравнении.
Если же вам нажо сравнивать логическое наполнение картинок - гуглите "распознавание образов".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы