Supprimer le fond de l'image en utilisant opencv Python

J'ai deux images, l'une avec seulement le fond et l'autre avec fond + détectable objet (dans mon cas sa voiture). Ci-dessous, les images sont

Supprimer le fond de l'image en utilisant opencv Python

Je suis en train de supprimer l'arrière-plan, que je n'ai que de la voiture dans l'image résultante. Voici le code que j'essaie d'obtenir les résultats souhaités

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)

L'image obtenue par soustraction des deux images est

Supprimer le fond de l'image en utilisant opencv Python

Là est le problème. Les attendus de l'image résultante devrait être une seule voiture.
Aussi, Si vous prenez un regard profond dans les deux images, vous verrez qu'ils ne sont pas exactement les mêmes que est, la caméra est un peu déplacé de sorte d'arrière-plan avait été dérangé un peu. Ma question est que, avec ces deux images comment puis-je soustraire le fond. Je ne veux pas utiliser grabCut ou backgroundSubtractorMOG algorithme dès maintenant, parce que je ne sais pas maintenant ce qui se passe à l'intérieur de ces algorithmes.

Ce que je suis en train de faire est d'obtenir à la suite de l'image résultante de Supprimer le fond de l'image en utilisant opencv Python

Aussi, si possible, veuillez me guider avec une façon générale, en faisant cela, non seulement dans ce cas particulier, j'ai un arrière-plan d'une image et d'arrière-plan+objet dans la seconde image. Ce qui pourrait être la meilleure façon possible de le faire. Désolé pour cette longue question.

source d'informationauteur muazfaiz