我不确定该错误,但请查看cv.RunningAvg的文档
它说目标应该是 32 或 64 位浮点。
所以我在你的代码中做了一个小的更正,它可以工作。我创建了一个32 位浮点图像来存储运行平均值,然后创建另一个 8 位图像,以便我可以显示运行平均值图像:
import cv2.cv as cv
feed = cv.CaptureFromCAM(0)
frame = cv.QueryFrame(feed)
moving_average = cv.CreateImage(cv.GetSize(frame),32,3) # image to store running avg
avg_show = cv.CreateImage(cv.GetSize(frame),8,3) # image to show running avg
def loop():
frame = cv.QueryFrame(feed)
c = cv.WaitKey(10)
cv.RunningAvg(frame, moving_average, 0.1, None)
cv.ConvertScaleAbs(moving_average,avg_show) # converting back to 8-bit to show
cv.ShowImage('live', frame)
cv.ShowImage('avg',avg_show)
while True:
loop()
cv.DestroyAllWindows()
现在看看结果:
在某个特定时刻,我保存了一个帧及其对应的运行平均帧。
原始框架:
You can see the obstacle (my hand) blocks the objects in behind
.
现在运行平均帧数:
它几乎移开了我的手,并在背景中显示了物体。
就是这样it is a good tool for background subtraction
。
典型交通视频的另一个例子:
您可以在此处查看更多详细信息和示例:http: //opencvpython.blogspot.com/2012/07/background-extraction-using-running.html