web-dev-qa-db-ja.com

抽出されたフレームからビデオを作成する方法?

ビデオフレームを「イメージ」というフォルダに抽出しました。フォルダーに画像を保存した後、次のコードを使用してビデオを再度作成します。ビデオを取得しましたが、フレームはランダムに並べられていますが、フレームを順番に並べるにはどうすればよいですか?投稿してくれてありがとう

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 image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

これを修正するにはどうすればよいですか?ビデオを元のビデオと同じレートにし、フレームを順番に並べたい。

5
programmer

フレームを保存する必要がある場合は、これを試してください

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)):
    video.write(cv2.imread(os.path.join(image_folder, 'a'+str(i)+'.jpg')))

cv2.destroyAllWindows()
video.release()
0
soumith

これでうまくいきます

import cv2
import os


image_folder = 'c:\\m\\'
video_name = 'c:\\m\\avideo.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

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


#25 fps
video = cv2.VideoWriter(video_name, 0, 25, (width,height))

for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

材料と結果 ここ

0
Mo Khalefa

ファイルをリストしてリストをソートするには、globを試してください。 globを使用してコードを編集しました。 (画像のファイル名が希望する順序になっていると仮定)

import cv2
import os
import glob

video_name = 'video.avi'

images = glob.glob('images/*.jpg')
images.sort()

frame = cv2.imread(images[0])
height, width, layers = frame.shape

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

for image in images:
    video.write(cv2.imread(image))

cv2.destroyAllWindows()
video.release() 
0

自然な並べ替えが必要なようです natsort ライブラリを試してください:

from natsort import natsorted

images = natsorted(images)

Pipを使用してインストールします。

pip install natsort
0
user3041840