2016-11-11 3 views
-2

Ich nehme Eingang von einem Video und ich möchte den Medianwert der ersten 5 Rahmen nehmen, so dass ich es als Hintergrundbild für Bewegungserkennung verwenden kann.Wie nehme ich im Median 5 Graustufenframes?

Auch ich möchte eine Zeitbedingung verwenden, sagen, wenn Bewegung nicht erkannt wird, dann berechnen Sie den Hintergrund erneut, sonst warten Sie t Sekunden. Ich bin neu zu opencv und ich weiß nicht, wie es geht .. Bitte helfen

Auch möchte ich mein Video in 1 fps aufnehmen, aber das funktioniert nicht. Hier ist der Code, ich habe:

import cv2 

BLUR_SIZE = 3 
NOISE_CUTOFF = 12 

cam = cv2.VideoCapture('gh10fps.mp4') 
cam.set(3, 640) 
cam.set(4, 480) 

cam.set(cv2.cv.CV_CAP_PROP_FPS, 1) 
fps=cam.get(cv2.cv.CV_CAP_PROP_FPS) 
print "Current FPS: ",fps 
+0

Danke für die Freigabe Ihres "Codes", was haben Sie tatsächlich versucht? – Julien

+0

Sind Sie sich bewusst, dass OpenCV Hintergrund-Subtrahierer-Algorithmen verwendet, die Sie verwenden können? Auch gibt es die ausgezeichnete Hintergrund Subtraktion Bibliothek: https://github.com/andrewssobral/bgslibrary –

+0

@Georg Sir, wie benutze ich diese Bibliothek in Python .. diese Bibliothek ist für cpp ich denke .. – sks

Antwort

1

Wenn Sie wirklich den Median der ersten 5 Frames wollen, dann sollten folgende tun, was Sie suchen:

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 
frames = [] 

for _ in range(5): 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    frames.append(gray) 

median = np.median(frames, axis=0).astype(dtype=np.uint8)  
cv2.imshow('frame', median) 
cv2.waitKey(0) 

cap.release() 
cv2.destroyAllWindows() 

Hinweis, dies nimmt nur die Quelle von einer Webcam als Beispiel.

Verwandte Themen