Чтобы найти различия между двумя изображениями, вы можете использовать индекс структурного сходства (SSIM), который был представлен в Оценка качества изображения: от видимости ошибок до структурного сходства . Этот метод уже реализован в библиотеке scikit-image для обработки изображений. Вы можете установить scikit-image
с pip install scikit-image
.
Используя функцию compare_ssim()
из scikit-image, он возвращает score
и разностное изображение diff
. score
представляет индекс структурного сходства между двумя входными изображениями и может находиться в диапазоне [-1,1] со значениями, близкими к единице, представляющей более высокое сходство. Но поскольку вас интересует только то, где два изображения различаются, изображение diff
- то, что вы ищете. Изображение diff
содержит фактические различия между двумя изображениями.
Вот фактические различия между двумя изображениями. Попробуйте использовать .png
изображения, так как они без потерь. .jpg
изображения с потерями и имеют шум из-за сжатия изображения.
![enter image description here](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 улавливает смещенные пиксели