Ошибка при создании видео из извлеченных кадров - PullRequest
0 голосов
/ 29 мая 2020

Я извлек видеокадры в папку под названием «изображения». Давайте рассмотрим:

a0.jpg a1.jpg a2.jpg a3.jpg и ......

теперь я хочу сделать видео из этих кадров.

У меня есть этот код для создания видео из извлеченных видео

  import cv2
import os


image_folder = 'images'
video_name = 'video.avi'


images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    frame = cv2.imread(os.path.join(image_folder, images[0]))

    height, width, layers = frame.shape

    video = cv2.VideoWriter(video_name, 0, 1, (width, height))

    video.write(cv2.imread(os.path.join(image_folder, image_name)))
cv2.destroyAllWindows()
video.release()

Проблема в том, что когда я делаю видео, я получаю видео, но кадры упорядочены случайным образом, как я могу расположить их в последовательном порядке ? спасибо за пост Как я могу это исправить?

1 Ответ

0 голосов
/ 29 мая 2020

Поскольку вы заявили, что ваши фреймы не в порядке, это означает, что когда вы получаете их через os.listdir, они приходят не по порядку. Вы также указали, что их имена похожи на a0, a1 и т. Д., Поэтому вы можете сделать это:

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    video.write(cv2.imread(os.path.join(image_folder, image_name)))

EDIT

Вы поместили свой видеомагнитофон внутрь l oop, поэтому он воссоздается каждый раз. На этот раз я приложил полный код, который должен работать.

import cv2
import os

image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]

frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 1, (width, height))

for i in range(len(images)):
    image_name = 'a' + str(i) + '.jpg'
    video.write(cv2.imread(os.path.join(image_folder, image_name)))

cv2.destroyAllWindows()
video.release()
...