3

ウェブカメラを使用してモーション検出プログラムを作成しようとしていますが、フレームの差をしきい値処理すると、次のような奇妙な結果が得られます。

私が動いているとき:(私は大丈夫だと思います) ![ここに画像の説明を入力してください] [1]

動かないとき: ![ここに画像の説明を入力してください] [2]

これは何でしょうか?私はすでにまったく同じアルゴリズムを取得したいくつかのプログラムを実行しましたが、しきい値処理は正常に機能しています。

これが私のコードです:

import cv2
import random
import numpy as np

# Create windows to show the captured images
cv2.namedWindow("window_a", cv2.CV_WINDOW_AUTOSIZE) 
cv2.namedWindow("window_b", cv2.CV_WINDOW_AUTOSIZE)

# Structuring element
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9,4))
## Webcam Settings
capture = cv2.VideoCapture(0)

#dimensions
frameWidth = capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
frameHeight = capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)

while True:
    # Capture a frame
    flag,frame = capture.read()
    
    current = cv2.blur(frame, (5,5))
    difference = cv2.absdiff(current, previous) #difference is taken of the current frame and the previous frame

    frame2 = cv2.cvtColor(difference, cv2.cv.CV_RGB2GRAY)
    retval,thresh = cv2.threshold(frame2, 10, 0xff, cv2.THRESH_OTSU)
    dilated1 = cv2.dilate(thresh, es)
    dilated2 = cv2.dilate(dilated1, es)
    dilated3 = cv2.dilate(dilated2, es)
    dilated4 = cv2.dilate(dilated3, es)

    cv2.imshow('window_a', dilated4)
    cv2.imshow('window_b', frame)

    previous = current
    
    key = cv2.waitKey(10) #20
    if key == 27: #exit on ESC
        cv2.destroyAllWindows()
        break

前もって感謝します![1]: http: //i.stack.imgur.com/hslOs.png [2]:http: //i.stack.imgur.com/7fB95.png

4

1 に答える 1

0

最初に必要なのは、previous = cv2.blur(frame, (5,5))while ループの前のフレーム グラブの後で、前のサンプルを準備することです。

これにより、投稿したコードが機能しますが、問題は解決しません。

あなたが抱えている問題は、使用しているしきい値アルゴリズムのタイプによるものだと思います。cv2.THRESH_BINARYOtsu の代わりにバイナリ , を試してください。それは私にとって問題を解決するように見えました。

于 2013-01-25T20:13:49.120 に答える