背景减除器MOG为何在物体离开画面后仍然保留其影像
我尝试使用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 上开了一个问题,并找到了这个解决办法。