我需要做的事情非常简单:
每一帧都能正确打开和显示,但显示的fgmask与显示的原始帧不对应。在某个过程中,fgmasks的顺序被混淆了。
背景确实被正确地减去了,但我没有得到5个预期的fgmasks。
我错过了什么?我觉得这应该很简单:while循环运行视频的5帧,fgbg.apply将背景减法函数应用于每一帧。
我使用的OpenCV版本是
- 加载一个5帧视频文件
- 检测背景
- 在每个帧上,逐一执行以下步骤:
- 减去背景(创建前景掩码)
- 对前景掩码进行一些计算
- 保存原始帧和前景掩码
import numpy as np
import cv2
cap = cv2.VideoCapture('test.avi')
fgbg = cv2.BackgroundSubtractorMOG()
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
# Display the fgmask frame
cv2.imshow('fgmask',fgmask)
# Display original frame
cv2.imshow('img', frame)
k = cv2.waitKey(0) & 0xff
if k == 5:
break
cap.release()
cv2.destroyAllWindows()
每一帧都能正确打开和显示,但显示的fgmask与显示的原始帧不对应。在某个过程中,fgmasks的顺序被混淆了。
背景确实被正确地减去了,但我没有得到5个预期的fgmasks。
我错过了什么?我觉得这应该很简单:while循环运行视频的5帧,fgbg.apply将背景减法函数应用于每一帧。
我使用的OpenCV版本是
opencv-2.4.9-3
。