2016-06-16 6 views
1

Angenommen, ich habe eine Anzahl von Videoclips, die eine bestimmte Sequenz von Schritten zeigen sollen, aber wenn die Clips erstellt wurden, haben sie möglicherweise unerwünschte Aktionen vor oder nach dem Ereignis enthalten.Wie man OpenCV's VideoWriter basierend auf Benutzeraktionen selektiv umschaltet

Wäre es möglich, OpenCV zu verwenden, um das Video Bild für Bild automatisch abzuspielen, so kann ein Benutzer eine Taste drücken, wenn er den Beginn der erforderlichen Aktion sieht, und eine andere, wenn die Sequenz beendet ist und diesen Teil des Videos haben als neues, kleineres, genaueres Video der Sequenz gespeichert.

Der folgende Code wird in dem Webcam-Frame für Frame lesen, um den Rahmen drehen, bevor zu einem Video zu schreiben, bis der Benutzer trifft die q Taste auf ihrer Tastatur.

Wie würde ich den Benutzer sicherzustellen, könnte der Strom von Rahmen zusehen, wie sie hereinkommen, dann, wenn sie die Veranstaltung sehen sie daran interessiert sind, sie die VideoWriter umschalten starten diese Bilder auf die Festplatte zu schreiben, sondern der Betreiber wouldn‘ t müssen zu treffen ständig einen Schlüssel jeden Frame zum VideoWriter zu senden und wenn der Bediener das Ereignis sieht, ist über sie die VideoWriter deaktivieren können wieder

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

# Define the codec and create VideoWriter object 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 

     # write the flipped frame 
     out.write(frame) 

     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

# Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 
+0

ich weiß, seine möglichen Mausaktionen zu erfassen, aber ich bin mit der linken Maustaste in das denken nach unten Aktion korrigieren als Toggle verwendet werden könnte, so dass, während, solange die Maustaste gehalten wird, die Frames würden in ein neues Video geschrieben werden und wenn es freigegeben wird bedeutet es, die Aufnahme zu stoppen, aber die Wiedergabe http: // opencv-pyth fortzusetzen on-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html – mobcdi

Antwort

1

Nachdem darüber nachzudenken, das Video Frame für Frame wouldn Schreiben‘ t eine große Nutzung von Ressourcen und möglicherweise nicht skalieren.

ich diesen Code erweitern werden die Ereignisdaten in eine CSV-Datei und verwenden, die in Verbindung mit MoviePy zu schreiben, um die subclips auf den aufgezeichneten Zeitstempel basiert zu extrahieren, wenn die linke Maustaste gedrückt

war

Wenn andere verbessern auf die Lösung würde ich ihr Eingang begrüßen

import cv2 
import numpy as np 
cap = cv2.VideoCapture('YourVideoFile.mp4') 

#Define the Mouse Callback Function 
def record_action(event,x,y,flags,param): 
    if event == cv2.EVENT_LBUTTONDOWN: 
     print "Left Button Down @ " + str(cap.get(cv2.CAP_PROP_POS_MSEC)) + " milliseconds into video \n" 
    elif event == cv2.EVENT_LBUTTONUP: 
     print "Left Button Up @ " + str(cap.get(cv2.CAP_PROP_POS_MSEC)) + " milliseconds into video \n" 

#Need to use a Named Window so it can be referenced in the mouse definition 
#and used when outputting the frames from the video in the imshow call later on 
cv2.namedWindow("RecordMe") 
#Bind the function above to the window 
cv2.setMouseCallback("RecordMe",record_action) 

while True: 
    ret, frame = cap.read() 
    #Use NamedWindow we created earlier to show the frames 
    cv2.imshow('RecordMe',frame) 
    if cv2.waitKey(30) & 0xff == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 
Verwandte Themen