У меня есть два изображения: один с фоном, а другой с фоном + обнаруживаемый объект (в моем случае его автомобиль). Ниже представлены изображения
Я пытаюсь удалить фон, чтобы в полученном изображении был только автомобиль. Ниже приведен код, с помощью которого я пытаюсь получить желаемые результаты.
import numpy as np
import cv2
original_image = cv2.imread('IMG1.jpg', cv2.IMREAD_COLOR)
gray_original = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
background_image = cv2.imread('IMG2.jpg', cv2.IMREAD_COLOR)
gray_background = cv2.cvtColor(background_image, cv2.COLOR_BGR2GRAY)
foreground = np.absolute(gray_original - gray_background)
foreground[foreground > 0] = 255
cv2.imshow('Original Image', foreground)
cv2.waitKey(0)
Полученное изображение путем вычитания двух изображений
Вот проблема. Ожидаемый результат должен быть только автомобилем. Кроме того, если вы глубоко взглянете на два изображения, вы увидите, что они не совсем такие же, как и на самом деле, камера немного сдвинулась, так что фон немного потревожился. Мой вопрос в том, что с этими двумя изображениями я могу вычесть фон. Я не хочу использовать алгоритм grabCut или backgroundSubtractorMOG прямо сейчас, потому что сейчас я не знаю, что происходит внутри этих алгоритмов.
То, что я пытаюсь сделать, - получить следующий результирующий образ
Также, если это возможно, пожалуйста, расскажите мне об общем способе делать это не только в этом конкретном случае, то есть у меня есть фон в одном изображении и фон + объект во втором изображении. Каким может быть наилучший способ сделать это. Извините за такой длинный вопрос.