🔍 Как сравнить 2 картинки на языке Python: простой способ
Для сравнения двух картинок в Python вы можете использовать модуль PIL (Python Imaging Library) и его метод ImageChops.difference().
from PIL import Image, ImageChops
def compare_images(image1_path, image2_path):
img1 = Image.open(image1_path)
img2 = Image.open(image2_path)
difference = ImageChops.difference(img1, img2)
if difference.getbbox() is None:
return "Картинки идентичны"
else:
return "Картинки отличаются"
result = compare_images("путь_к_первой_картинке", "путь_к_второй_картинке")
print(result)
Детальный ответ
Как сравнить 2 картинки в Python
Когда требуется сравнение двух изображений в Python, мы можем использовать различные методы для определения их схожести или различий. В этой статье мы рассмотрим несколько подходов к сравнению изображений с помощью Python.
Сравнение пикселей:
Один из простых способов сравнения изображений - это сравнение каждого пикселя изображения с соответствующим пикселем другого изображения. Мы можем сравнивать значения RGB-каналов пикселей, а затем вычислять среднюю разницу между ними.
from PIL import Image
def compare_images(image1_path, image2_path):
image1 = Image.open(image1_path)
image2 = Image.open(image2_path)
pixels1 = image1.load()
pixels2 = image2.load()
width, height = image1.size
diff = 0
for y in range(height):
for x in range(width):
r1, g1, b1 = pixels1[x, y]
r2, g2, b2 = pixels2[x, y]
diff += abs(r1 - r2) + abs(g1 - g2) + abs(b1 - b2)
average_diff = diff / (width * height * 3)
return average_diff
image1_path = 'image1.jpg'
image2_path = 'image2.jpg'
diff = compare_images(image1_path, image2_path)
print(f"Среднее различие между изображениями: {diff}")
В этом примере мы используем библиотеку Pillow для открытия изображений и получения пикселей. Затем мы проходимся по каждому пикселю изображений и вычисляем разницу в значениях RGB-каналов. Наконец, мы вычисляем среднее различие, поделив общую разницу на количество пикселей и компоненты цвета.
Структурное сравнение:
Кроме сравнения пикселей, мы также можем использовать структурное сравнение для измерения различий между изображениями. Одним из распространенных методов структурного сравнения является сравнение гистограмм цветовых каналов изображений.
import cv2
import numpy as np
def compare_images(image1_path, image2_path):
image1 = cv2.imread(image1_path)
image2 = cv2.imread(image2_path)
hist1 = cv2.calcHist([image1], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
hist2 = cv2.calcHist([image2], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
return similarity
image1_path = 'image1.jpg'
image2_path = 'image2.jpg'
similarity = compare_images(image1_path, image2_path)
print(f"Степень схожести изображений: {similarity}")
В данном примере мы используем библиотеку OpenCV для работы с изображениями. Мы вычисляем гистограммы цветовых каналов обоих изображений с помощью функции calcHist
. Затем мы сравниваем эти гистограммы с помощью функции compareHist
и получаем степень схожести.
Использование алгоритма сравнения структурных особенностей (SSIM):
SSIM (Structural Similarity Index) - это алгоритм, который измеряет структурную схожесть между двумя изображениями. Он учитывает не только разницу в яркости пикселей, но и их текстурные свойства.
import cv2
from skimage.metrics import structural_similarity as ssim
def compare_images(image1_path, image2_path):
image1 = cv2.imread(image1_path)
image2 = cv2.imread(image2_path)
image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
similarity = ssim(image1, image2)
return similarity
image1_path = 'image1.jpg'
image2_path = 'image2.jpg'
similarity = compare_images(image1_path, image2_path)
print(f"Степень структурной схожести изображений: {similarity}")
В этом примере мы используем библиотеку scikit-image для вычисления структурной схожести (SSIM). Мы сначала преобразуем изображения в оттенки серого с помощью функции cvtColor
из библиотеки OpenCV. Затем мы используем функцию ssim
для вычисления степени структурной схожести.
Заключение:
Сравнение двух изображений в Python может быть выполнено с использованием различных методов. В этой статье мы рассмотрели сравнение по пикселям, структурное сравнение и использование алгоритма сравнения структурных особенностей (SSIM). Каждый из этих методов имеет свои преимущества и может быть выбран в зависимости от конкретной задачи.