Сравнение двух изображений и отображение разницы в новом изображении?

Вопрос или проблема

Я хотел бы сравнить изображения двух веб-страниц, используя техники компьютерного зрения. Покажите, какие части не уникальны при сравнении обоих изображений. Какая часть изображения 1 отсутствует в изображении 2, и наоборот.

Изображение веб-страницы 1

Изображение веб-страницы 2

Простое и эффективное решение — это вычисление абсолютных значений разности изображения. Это можно сделать следующим образом:

import cv2
img_a = cv2.imload([имя_файла_первого_изображения])
img_b = cv2.imload([имя_файла_второго_изображения])
img_diff = cv2.absdiff(img_a, img_b)
cv2.imshow('абсолютная разность', img_diff)
cv2.waitKey(-1)

Ответ или решение

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

Шаги по сравнению изображений с использованием OpenCV

  1. Импорт библиотек: Начнем с импорта необходимых библиотек. Вам понадобятся cv2 для работы с изображениями и numpy для обработки массивов.
import cv2
import numpy as np
  1. Загрузка изображений: Загрузите два изображения, которые вы планируете сравнить. Обратите внимание на то, что изображения должны быть одинакового размера. Если они различаются по размеру, вам необходимо использовать функции изменения размера.
img_a = cv2.imread('path_to_image1.jpg')
img_b = cv2.imread('path_to_image2.jpg')

# Измените размер изображений, если необходимо
img_b = cv2.resize(img_b, (img_a.shape[1], img_a.shape[0]))
  1. Вычисление абсолютного разности: Для нахождения различий между двумя изображениями мы используем функцию cv2.absdiff(), которая возвращает абсолютное значение разности соответствующих пикселей двух изображений.
img_diff = cv2.absdiff(img_a, img_b)
  1. Пороговое значение: Для выделения различий на изображении можно применить пороговое значение. Это позволит нам сконцентрироваться на значительных изменениях.
# Преобразование в оттенки серого и применение порога
gray_diff = cv2.cvtColor(img_diff, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)
  1. Отображение различий: Для удобства анализа можно визуально выделить различия с помощью контуров.
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    cv2.drawContours(img_a, [contour], -1, (0, 255, 0), 2)  # Рисуем контуры на первом изображении
cv2.imshow('Differences', img_a)
cv2.waitKey(0)
cv2.destroyAllWindows()

Объяснение кода

  • Загрузка изображений: Функция cv2.imread() используется для загрузки изображений с указанного пути.
  • Изменение размера: Это важно, чтобы оба изображения имели одинаковые размеры для корректного сравнения.
  • Абсолютная разность: Функция cv2.absdiff() находит разности между пикселями, которые затем могут быть проанализированы.
  • Пороговое значение: Преобразование в черно-белое изображение и применение порога помогает выявить ключевые изменения.
  • Контуры: Мы используем cv2.findContours() для поиска и рисования контуров областей, которые различаются.

Заключение

Таким образом, описанный подход позволяет не только находить и визуализировать различия между двумя изображениями веб-страниц, но и дает возможность эффективно использовать компьютерное зрение для решения практических задач. Используя OpenCV и основные методы обработки изображений, вы можете автоматизировать процесс сравнения и ускорить анализ изменений между версиями веб-страниц.

Этот подход предоставляет мощный инструмент для веб-дизайнеров, разработчиков и тестировщиков, позволяя проводить полный анализ визуальных изменений.

Оцените материал
Добавить комментарий

Капча загружается...