こんにちは、学習者の皆さん。今日は、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() |

まとめ
動画から画像を抽出する方法がわかりましたね。お気に召したでしょうか?もっと学ぶために滞在してください
お読みいただきありがとうございました。