Чтобы найти различия между двумя изображениями, вы можете использовать Индекс структурного подобия (SSIM), который был представлен в Оценка качества изображения: от видимости ошибок до структурного сходства. Этот метод уже реализован в scikit-image. библиотека для обработки изображений. Вы можете установить scikit-image
с pip install scikit-image
.
Используя функцию compare_ssim()
из scikit-image, он возвращает score
и разностное изображение diff
. score
представляет индекс структурного сходства между двумя входными изображениями и может находиться в диапазоне [-1,1] со значениями, близкими к единице, представляющей более высокое сходство. Но поскольку вас интересует только то, где различаются два изображения, изображение diff
то, что вы ищете. Изображение diff
содержит фактические различия между двумя изображениями.
Вот фактические различия между двумя изображениями. Рассмотрите возможность использования изображений .png
, так как они не имеют потерь. .jpg
изображений с потерями и шумами из-за сжатия изображения.
![введите здесь описание изображения](https://i.stack.imgur.com/UBewS.jpg)
Код
from skimage.measure import compare_ssim
import cv2
# Load images
image1 = cv2.imread('1.jpg')
image2 = cv2.imread('2.jpg')
# Convert images to grayscale
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
# Compute SSIM between two images
(score, diff) = compare_ssim(image1_gray, image2_gray, full=True)
# The diff image contains the actual image differences between the two images
# and is represented as a floating point data type in the range [0,1]
# so we must convert the array to 8-bit unsigned integers in the range
# [0,255] before we can use it with OpenCV
diff = (diff * 255).astype("uint8")
cv2.imshow('diff',diff)
cv2.waitKey()
Примечание. Два исходных изображения не совсем одинаковы, они немного сдвинуты, поэтому SSIM улавливает смещенные пиксели.
person
nathancy
schedule
13.02.2020