我尝试使用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和自定义参数(历史= 200,nmixtures = 5,比率= 0.8)但结果是一样的。我做错了什么或有任何推荐吗?请帮忙。
答案 0 :(得分: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上开了一张票并找到了解决方案