2012-07-19 86 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