こんにちは、学習者の皆さん。今日は、PythonのOpenCVモジュールを使って動画から画像を抽出する方法を学びます。では、始めましょう
この記事もチェック:PythonとOpenCVで画像の特徴量抽出・照合を実装する方法
チュートリアルの目標
プログラミング言語 Python の OpenCV モジュールを用いて、1 つのビデオファイルから各フレームを抽出することを目指します。
Python OpenCVによる動画からの画像抽出
さて、具体的に何をするのかがわかりました。さっそくコードを実装してみましょう。
1. モジュールのインポート
他のプロジェクトと同じように、最初のステップはモジュールをインポートすることです。このプログラムでは、openCV
モジュールだけが必要です。
このモジュールがシステムにインストールされていることを確認してください.もし、OpenCV が何であるかを知らないなら、このチュートリアルを見てください。この記事では、OpenCV の基本的な概念に精通することができます。
2. ビデオのキャプチャ
ビデオをキャプチャするために、opencv モジュールの VideoCapture
関数を使用し、録画したビデオを変数に格納します。
ビデオファイルがコードファイルと同じフォルダにあることを確認するか、ビデオファイルの正確なパスを入力する必要があります。
おすすめの読み物 moviepyモジュールを使って動画を編集するには?
ビデオを持っていない場合は、関数内で値0
を渡すと、ウェブカメラからライブデータをキャプチャすることができます。
1
2
3
|
import cv2
cam = cv2.VideoCapture( "video.mp4" )
currentframe = 0
|
3. 各フレームを抽出し、フレーム画像を保存する
コードを一行ずつ見て、理解しましょう。
1
2
3
4
5
6
7
8
|
while ( True ):
ret,frame = cam.read()
if ret:
name = 'Video to ImagesFrame(' + str (currentframe) + ').jpg'
cv2.imwrite(name, frame)
currentframe + = 1
else :
break
|
1行目。動画からフレームが無くなるまで処理を続けるループを作成。
2行目: read関数を使って、rel と frame の 2 つのオブジェクトを取得します。
– フレームを受信しているかどうかを示す True または False のいずれかを返します。
rel
frame` – 特定の瞬間のフレーム全体を返します。
3-6行目: rel
の値を使用して、フレームが利用可能かどうかをチェックする if
条件です。そして、現在のフレームのパスと名前の形式を設定します。
currentframe 変数はフレーム数を保持しています。そして、imwrite
関数を使って、先ほどのパスにフレームを書き込んでいきます。
7-8行目: ループを抜けるために、フレームがないときの else
条件が考慮されます。
4. 4. すべての Windows を解放して破棄する
最後のステップは、release
関数を使用して、先に作成したすべてのビデオキャプチャーオブジェクトを解放することです。
次に、destroyAllWindows
関数を使用して、作成されたすべてのウィンドウを破棄し、コード全体を終了します。
1
2
|
cam.release() cv2.destroyAllWindows() |
最終的なコードと出力
最終的なコードと、作成されたフレームのスクリーンショットを以下に示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import cv2
import os
cam = cv2.VideoCapture( "video.mp4" )
currentframe = 0
while ( True ):
ret,frame = cam.read()
if ret:
name = 'Video to ImagesFrame(' + str (currentframe) + ').jpg'
cv2.imwrite(name, frame)
currentframe + = 1
else :
break
cam.release() cv2.destroyAllWindows() |
まとめ
動画から画像を抽出する方法がわかりましたね。お気に召したでしょうか?もっと学ぶために滞在してください
お読みいただきありがとうございました。