🔍 Как сравнить 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). Каждый из этих методов имеет свои преимущества и может быть выбран в зависимости от конкретной задачи.

Видео по теме

Cравнениe изоражений с Python + Pillow

py079 Сравнение питонов 2 и 3

Python-разработчикам больше не нужен Photoshop. Pillow, или программируемый фото-редактор

Похожие статьи:

Что такое массив в Python? Примеры и объяснение

Как добавить строку в конец файла python: простое руководство с примерами и пошаговыми инструкциями

📊 Как посчитать среднее арифметическое в Python в массиве? 🐍

🔍 Как сравнить 2 картинки на языке Python: простой способ

Как создать изображение в Python: подробное руководство с шагами🖌️

😎 Как скомпилировать скрипт на питоне: подробный руководство для новичков 🚀

Что такое остаток от деления в Питоне? Алгоритмы и примеры использования 🧮