Как получить маску переднего плана с заданным фоновым изображением

Скажи, у меня есть фоновое изображение 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

0 ответов

Другие вопросы по тегам