2012-07-19 4 views
1

저는 카메라 피드의 실행 평균을 생성하고 업데이트하는 작은 스크립트 (파이썬에서)를 작성 중입니다. 내가 호출 할 때 cv.RunningAvg는 반환openCV RunningAvg implementation

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

내가 오류에 대해 잘 모르겠지만, 그것은 대상이 32 또는 64 비트 부동 소수점 수 있어야 말한다 cv.RunningAvg

설명서를 확인하십시오.

그래서 코드에 작은 수정을가했습니다.

에서 :

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() 

지금 결과를 볼 : 나는 실행 평균 이미지를 표시 할 수 있도록 평균값, 다음 다른 8 비트 이미지를 실행 저장하는 32 비트 부동 소수점 이미지를 생성 특정 순간에 프레임과 해당 실행중인 평균 프레임을 저장했습니다.

원래 프레임 :

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