1

カメラ フィードの移動平均を生成および更新する小さなスクリプト (Python) を作成しています。cv.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()
4

1 に答える 1

12

エラーについてはよくわかりませんが、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

于 2012-07-19T14:07:05.080 に答える