Захватить видеокадры из всех видео в папке, обработать с openCV, сохранить в собственную папку? - PullRequest
0 голосов
/ 24 января 2020

У меня есть такой код. Я знаю, что это не правильно, но я новичок в этом и не знаю, как это исправить. Как мне сделать так, чтобы cv2 запускался на каждом видео, которое у меня есть в папке, снимая кадр каждые 3 секунды и сохраняя изображения кадра в новой папке в /data/ --- ex. /data/rise_of_skywalker?

Спасибо

import cv2
import numpy as np
import os

def frame_capture(file):
    cap = cv2.VideoCapture(file)
    try:
        if not os.path.exists('data'):
            os.makedirs('data')
    except OSError:
        print('Error: Creating directory of data')

    currentFrame = 0

    while(True):
      # Capture frame by frame
        ret, frame = cap.read()
'''
(((how do I change this block here to get it for every 3 seconds?)))
'''
        if currentFrame == 5:
            name = './data/frame' + str(currentFrame) + '.jpg'
            print ('Creating...' + name)
            cv2.imwrite(name, frame)

      # To stop duplicate images
        currentFrame += 1

    cap.release()
    cv2.destroyAllWindows()
    print ("Done!")

for file in os.listdir("/users/x/Desktop/y/videos"):

    if file.endswith(".mp4"):
        path=os.path.join("/users/x/Desktop/y/videos", file))
        frame_capture(path)

1 Ответ

0 голосов
/ 26 января 2020

Если я правильно понимаю, вам нужно изменить строку if currentFrame == 5: на if currentFrame % (3 * fps) == 0: И перед этой строкой, за пределами l oop, добавить fps = cap.get(cv2.CAP_PROP_FPS)

...