画像処理ライブラリOpenCVで動画ファイルを扱う場合、VideoCaptureにより動画ファイルからVideoCapture型オブジェクトを生成する。
OpenCVを使うには次のようにインポートが必要。
import cv2
1. 動画ファイルの読み出しとプロパティ取得
動画ファイルからVideoCapture型オブジェクトを生成する際には以下のようにする。またVideoCapture型オブジェクトの使用後はreleaseにより解放する。
cap = cv2.VideoCapture(filename) cap.release()
動画ファイルのプロパティを取得するにはVideoCapture型オブジェクトにたいしてgetを使う。書式は以下。
cv2.VideoCapture.get(propId)
propIdには取得したいProperty identifierを指定する。多数あるが代表的なものは以下。
Property identifier | 意味 |
---|---|
cv2.CAP_PROP_FRAME_WIDTH | フレームの幅 |
cv2.CAP_PROP_FRAME_HEIGHT | フレームの高さ |
cv2.CAP_PROP_FPS | 動画のフレームレート。フレーム/秒 |
cv2.CAP_PROP_FRAME_COUNT | 動画のフレーム数 |
例に用いる動画 '1203_640x360.mp4' は以下の 動画AC「側転をしてカメラ目線で笑顔でポーズする女性」を使用。
import cv2 # VideoCaptureオブジェクトの生成 cap = cv2.VideoCapture('1203_640x360.mp4') # getメソッドによるプロパティ取得 # フレームの幅 print(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # フレームの高さ print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # フレームレート print(cap.get(cv2.CAP_PROP_FPS)) # 総フレーム数 print(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # VideoCaptureオブジェクトのリリース cap.release()
実行結果。以下のプロパティが表示される。
フレームの幅 : 640ピクセル
フレームの高さ : 360ピクセル
フレームレート : 29.97フレーム/秒
総フレーム数 : 201フレーム
640.0 360.0 29.97002997002997 201.0
2. キャプチャー画像の保存
動画ファイルから指定のフレームまたは指定の経過時間のフレームを画像として保存する場合、VideoCapture型オブジェクトにたいしてsetによりフレームまたは経過時間を指定し、readによりフレームを読み出す。
setの書式は
cv2.VideoCapture.set(propId, value)
propIdはフレーム数を指定する際にはcv2.CAP_PROP_POS_FRAMES、経過時間(msec)を指定する場合はcv2.CAP_PROP_POS_MSECを用いる。valueはフレーム数または時間を指定する。
動画のフレーム100を画像に保存する例。
import cv2 # VideoCaptureオブジェクトの生成 cap = cv2.VideoCapture('1203_640x360.mp4') # フレーム100に移動 cap.set(cv2.CAP_PROP_POS_FRAMES, 100) # 画像の取得 ret, frame = cap.read() # 画像保存 cv2.imwrite('frame100.jpg', frame) # VideoCaptureオブジェクトのリリース cap.release()
実行結果
動画の4000msec(4秒)のフレームを画像に保存する例。
import cv2 # VideoCaptureオブジェクトの生成 cap = cv2.VideoCapture('1203_640x360.mp4') # 4000msec(4秒)に移動 cap.set(cv2.CAP_PROP_POS_MSEC, 4000) # 画像の取得 ret, frame = cap.read() # 画像保存 cv2.imwrite('msec4000.jpg', frame) # VideoCaptureオブジェクトのリリース cap.release()
実行結果
3. リファレンス
OpenCV > cv::VideoCapture Class Reference > VideoCapture()
OpenCV > cv::VideoCapture Class Reference > release()
OpenCV > cv::VideoCapture Class Reference > set()
OpenCV > cv::VideoCapture Class Reference > get()
OpenCV > Flags for video I/O > VideoCaptureProperties
0 件のコメント:
コメントを投稿