Как получить маску переднего плана с заданным фоновым изображением
Скажи, у меня есть фоновое изображение bg
и текущий кадр I
Как я могу получить маску переднего плана fgmask
?
Примечание: использование способа stander fgmask = abs(bg-I) > th
не дает точного результата, много шума найдено.
Мне известна функция MOG2 в opencv, но проблема с этой функцией в том, что AFAIK дает маску переднего плана в зависимости от адаптивного фона, который генерирует модель. Есть ли здесь, чтобы установить этот фон?
ОБНОВИТЬ:
Я нашел способ получить маску переднего плана, но я думаю, что она чувствительна к свету и теням.
def getForegroundMask(frame, background, th):
# reduce the nois in the farme
frame = cv2.blur(frame, (5,5))
# get the absolute difference between the foreground and the background
fgmask= cv2.absdiff(frame, background)
# convert foreground mask to gray
fgmask = cv2.cvtColor(fgmask, cv2.COLOR_BGR2GRAY)
# apply threshold (th) on the foreground mask
_, fgmask = cv2.threshold(fgmask, th, 255, cv2.THRESH_BINARY)
# setting up a kernal for morphology
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# apply morpholoygy on the foreground mask to get a better result
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_CLOSE, kernel)
return fgmask