2017-03-14 1 views
-1

Ich arbeite derzeit an der Keyframe-Extraktion von Videos.Keyframes extrahieren | Python | Opencv

Code:

while success: 
        success, currentFrame = vidcap.read() 
        isDuplicate = False 
        limit = count if count <= 10 else (count - 10) 
        for img in xrange(limit, count): 
         previusFrame = cv2.imread("%sframe-%d.png" % (outputDir, img)) 
         try: 
          difference = cv2.subtract(currentFrame, previusFrame) 
         except: 
          pass 

Das gibt mir große Mengen an Frames. Erwarteter Ausgang: Berechnen Sie die Pixeldifferenz zwischen Bildern und vergleichen Sie sie dann mit einem Schwellenwert und speichern Sie eindeutige Keyframes.

Zum ersten Mal an Videos arbeiten. Sie führen zum weiteren Vorgehen der erwarteten Ausgabe

Antwort

1

Sie den folgenden Codeausschnitt verwenden zu erreichen, die für die Differenz zwischen dem Rahmen als durch alle Rahmen und prüft iterativ:

import cv2 
import numpy as np 

video_path = "/Users/anmoluppal/Downloads/SampleVideo_1280x720_1mb.mp4" 
p_frame_thresh = 300000 # You may need to adjust this threshold 

cap = cv2.VideoCapture(video_path) 
# Read the first frame. 
ret, prev_frame = cap.read() 

while ret: 
    ret, curr_frame = cap.read() 

    if ret: 
     diff = cv2.absdiff(curr_frame, prev_frame) 
     non_zero_count = np.count_nonzero(diff) 
     if non_zero_count > p_frame_thresh: 
      print "Got P-Frame" 
     prev_frame = curr_frame