背景减除器MOG为何在物体离开画面后仍然保留其影像

5 投票
1 回答
3025 浏览
提问于 2025-04-20 04:31

我尝试使用BackgroundSubtractorMOG来去除背景,但有些物体已经离开了画面,但BackgroundSubtractorMOG.apply()的结果仍然显示这些物体还在场景中。

这是我的代码

inputVideo = cv2.VideoCapture('input.avi')
fgbg = cv2.BackgroundSubtractorMOG()

while inputVideo.isOpened():
    retVal, frame = inputVideo.read()

    fgmask = fgbg.apply(frame)

    cv2.imshow('Foreground', fgmask)
    cv2.imshow('Original', frame)
    if cv2.waitKey(1) & 0xFF == 27:
        break

我还尝试了使用自定义参数的BackgroundSubtractorMOG(history = 200, nmixtures = 5, ratio = 0.8),但结果还是一样。我是不是做错了什么,或者有什么建议吗?请帮帮我。

1 个回答

9

问题出在 fgbg.apply 这个地方。由于某种原因,learningRate 被设置成了 0。可以这样调用:

history = 10   # or whatever you want it to be

fgmask = fgbg.apply(frame, learningRate=1.0/history)

要感谢 Sebastian Ramirez,他在 opencv 上开了一个问题,并找到了这个解决办法。

撰写回答