動画を36分割の画像データに変換したいのですがどうすれば良いのかわかりません。
動画再生後スペースボタンを押したら36枚のフレーム画像を抽出し保存できるプログラムはできたのですが、ですが求めているのは、動
画全体を均等に36枚の静止画として保存できるプログラムです。できる方ご指導願います!
python
1import cv2 2import sys 3import time 4import numpy as np 5import sys 6import imutils 7import os, shutil 8import glob 9 10x = 0 11y = 35 12 13ext = ".jpg" 14window_name = 'frame' 15# 表示ウィンドウ????作成 16cap = cv2.VideoCapture('001.MOV') 17 18if not cap.isOpened(): 19 print("Error! Can't open video file.") 20 sys.exit() 21mode = False 22 23while True: 24 retval, frame = cap.read() 25 frame = imutils.resize(frame, width=640) 26 frame = frame.transpose((1, 0, 2)) 27 if frame is None: 28 break 29 30 if x > y: 31 break 32 33 cv2.imshow(window_name, frame) # 1 フレーム表示 34 key = cv2.waitKey(25) 35 if key == 32: #スペースボタン 36 True 37 mode = True 38 39 elif key == 27: 40 break 41# ESC キーを押したとき終了 break 42 if mode: 43 fname = str(x).zfill(3)+ext 44 cv2.imwrite(fname, frame) 45 x += 1 46 time.sleep(0.06) 47 48cv2.destroyAllWindows() 49# すべて????表示ウィンドウ????破棄 50cap.release() 51# ビデオファイル(キャプチャ機器)を閉じる
> 動画全体を均等に36枚の静止画として保存
の意味がわからないです.
動画を静止画として保存するとはどういうことですか?
例えば動画が全72フレームだとしたら,36枚の静止画とはどのような絵になるのですか?
fana さん
例えば3秒の動画を0.083秒ごとの36枚の静止画にしたいということです。
5秒の動画であれば0.13秒ごとの36枚の静止画にするということです。
訊き方がまずかったですかね?
動画が全72フレームだとしたら各静止画は動画の2フレームを元にして「どうにかして」生成されるという話だと思うのですが,この「どうにかして」の部分は実際には何をやるのでしょうか? という質問です.
例えば,1フレーム目が真っ青な絵で2フレーム目が真っ赤な絵である動画を入力した際,生成される36枚の静止画うちの1枚目というのはどんな絵になるのでしょう? 紫色になるのでしょうか? それとも「幅が動画のフレーム画像の2倍の大きさで,左側が青,右側が赤」みたいな繋いだ絵になるとかでしょうか? その他?
それとも単に,{2フレーム目, 4フレーム目, ..., 70フレーム目, 72フレーム目}という36枚を抜き出すだけ,という話ですか?
説明不足で大変申し訳ございません!
最終的に動画から抜き出した36枚の静止画を6x6のシーケンス画像にしたいのです。
72フレームの動画であれば{2フレーム目, 4フレーム目, ..., 70フレーム目, 72フレーム目}という36枚を抜き出せばいいのですが、2秒から3秒の動画が100個以上あるため、一つ一つの動画でフレーム指定しての抜き出しはかなり手間がかかってしまいます。
なので、フレーム指定ではなく、各動画全て36枚の静止画に等分割できるようなプログラムを作成できないか考えております。
回答1件
あなたの回答
tips
プレビュー