Вычитание изображений — фундаментальная операция в компьютерном зрении и обработке изображений. Вычитая два изображения, мы можем выделить различия между ними, что может быть полезно в различных приложениях, таких как обнаружение движения, вычитание фона и выравнивание изображений. В этом сообщении блога мы рассмотрим несколько методов вычитания двух изображений с использованием Python и библиотеки OpenCV. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять и реализовать их в своих проектах.
Методы:
- Базовое попиксельное вычитание:
- Описание: этот метод вычитает соответствующие значения пикселей из двух изображений.
- Пример кода:
import cv2
import numpy as np
# Load the images
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# Ensure that the images have the same dimensions
image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]))
# Subtract the images
subtracted_image = cv2.subtract(image1, image2)
# Display the result
cv2.imshow("Subtracted Image", subtracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
- Абсолютная разница:
- Описание: этот метод вычисляет абсолютную разницу между соответствующими значениями пикселей двух изображений.
- Пример кода:
import cv2
import numpy as np
# Load the images
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# Ensure that the images have the same dimensions
image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]))
# Calculate the absolute difference
abs_diff = cv2.absdiff(image1, image2)
# Display the result
cv2.imshow("Absolute Difference", abs_diff)
cv2.waitKey(0)
cv2.destroyAllWindows()
- Пороговая разница:
- Описание: этот метод вычитает два изображения и применяет порог к полученному разностному изображению, создавая двоичную маску различий.
- Пример кода:
import cv2
import numpy as np
# Load the images
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# Ensure that the images have the same dimensions
image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]))
# Subtract the images
subtracted_image = cv2.subtract(image1, image2)
# Convert the difference image to grayscale
gray_diff = cv2.cvtColor(subtracted_image, cv2.COLOR_BGR2GRAY)
# Apply a threshold
_, threshold = cv2.threshold(gray_diff, 30, 255, cv2.THRESH_BINARY)
# Display the result
cv2.imshow("Thresholded Difference", threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
- Взвешенная разница:
- Описание. Этот метод вычитает два изображения и присваивает вес полученному разностному изображению, улучшая визуальное представление различий.
- Пример кода:
import cv2
import numpy as np
# Load the images
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# Ensure that the images have the same dimensions
image2 = cv2.resize(image2, (image1.shape[1], image1.shape[0]))
# Subtract the images
subtracted_image = cv2.subtract(image1, image2)
# Apply a weight to the difference image
weighted_diff = cv2.addWeighted(subtracted_image, 1.5, np.zeros(subtracted_image.shape, dtype=subtracted_image.dtype), 0, 0)
# Display the result
cv2.imshow("Weighted Difference", weighted_diff)
cv2.waitKey(0)
cv2.destroyAllWindows()
В этом сообщении блога мы рассмотрели различные методы вычитания двух изображений с использованием Python и OpenCV. Эти методы включают базовое попиксельное вычитание, абсолютную разницу, пороговую разницу и взвешенную разницу. В зависимости от конкретных требований вашего проекта вы можете выбрать наиболее подходящий метод. Используя эти методы, вы можете эффективно анализировать различия между изображениями и извлекать ценную информацию для различных приложений компьютерного зрения.