2012-07-19 118 views
1

我正在编写一个小脚本(使用Python),它生成并更新摄像头提要的运行平均值。当我打电话cv.RunningAvg它返回:openCV RunningAvg实现

cv2.error: func != 0 

我在哪里实施cv.RunningAvg绊脚石?脚本如下:

import cv 

feed = cv.CaptureFromCAM(0) 
frame = cv.QueryFrame(feed) 
moving_average = cv.QueryFrame(feed) 
cv.NamedWindow('live', cv.CV_WINDOW_AUTOSIZE) 

def loop(): 
    frame = cv.QueryFrame(feed) 
    cv.ShowImage('live', frame) 
    c = cv.WaitKey(10) 

    cv.RunningAvg(frame, moving_average, 0.020, None) 

while True: 
    loop() 

回答

11

我不知道的错误,但检查出的文档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() 

现在看到的结果是:

在在一个特定的时刻,我保存了一个帧和相应的运行平均帧。

原始帧:

enter image description here

You can see the obstacle (my hand) blocks the objects in behind

现在运行的平均帧

enter image description here

它几乎打消了我的手,显示在背景对象。

那就是如何it is a good tool for background subtraction

再举一个例子,从一个典型的交通视频:

enter image description hereenter image description here

你可以看到更多的细节和样品在这里:http://opencvpython.blogspot.com/2012/07/background-extraction-using-running.html

+0

谢谢!迟来的回应,但谢谢。 – benkay 2013-07-29 04:25:10