Я хочу сохранить кадры видео через определенные промежутки времени с помощью модуля Python OpenCV - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу сохранить кадры видео через определенные промежутки времени, используя модуль python opencv.

Я должен разделить видеофайл на 40 изображений.Но я не думаю об алгоритмах.

Моя идея такова:

  1. Входной видеофайл.
  2. Подсчитывает количество кадров и кадров в секунду в видео.
  3. Возвращает интервал между кадрами.(длина / 40)
  4. Выполнить при

Способ подсчета количества кадров, кадров в секунду и интервала перехода:

length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)

После подсчета количестваframe, fps и jump (Пример):

D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's FPS :  25.0
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Length :  164
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Running time :  6.56
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's jump :  4 ( 4.1 )

, а вот цикл while:

while count < length and save < 40:
    print("Count : ", count)
    success, frame = cap.read()
    cv2.imshow('Window', frame)
    if count % jump == 0:
        cv2.imwrite(save_path + LabelList[LabelNumber] + "\\" + FileList[FileNumber] + "_" + str(count) + ".jpg", frame)
        save = save + 1
        print("Saved! : ", save)
    cv2.waitKey(1)
    count = count + 1

И я столкнулся с двумя проблемами:

  1. Видеос общей длиной менее 30 кадров
  2. Нет такого кадра, как 3.25 кадра (всего 3 кадра, а не число с плавающей точкой)

В любом случае,Если вы заинтересованы в моей проблеме, я научу вас подробно.Я не знаю, что сказать.

Важно то, что я хочу сохранять 40 изображений через равные промежутки времени независимо от длины изображения.

Пожалуйста, помогите мне, брат ...

1 Ответ

0 голосов
/ 27 сентября 2018

Нет такого кадра, как 3,25 кадра (есть только 3 кадра, а не число с плавающей точкой)

Если вы сделаете jump с плавающей точкой, то просто измените ваше состояние на count % jump < 1.Вы получите неравномерное расстояние между кадрами, но в каждом случае должно быть 40 кадров.

Видео общей длиной менее 30 кадров.

Просто установите jump в 1, если количество кадров <= 40, и вы получите все доступные кадры. </p>

...