エラーについてはよくわかりませんが、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
です。
典型的なトラフィック ビデオからのもう 1 つの例:
ここで詳細とサンプルを確認できます: http://opencvpython.blogspot.com/2012/07/background-extraction-using-running.html