Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】OpenCVで動画からフレームを抽出して画像として保存する方法


OpenCVとは?

OpenCV(Open Source Computer Vision Library)は、機械学習とコンピュータビジョン向けに開発されたオープンソースのプログラミングライブラリです。コンピュータビジョンアプリケーションの開発や、商用製品への機械学習機能の迅速な組み込みを支援する共通基盤を提供しています。

OpenCVには2,500を超える最適化済みアルゴリズムが収録されており、古典的な手法から最先端の手法まで幅広くカバーしています。これらを活用することで、顔検出・顔認識、物体の識別、動画内の人間の動作の分類、カメラの動きのトラッキング、複数枚の画像をつなぎ合わせた高解像度シーン画像の生成など、さまざまな用途に利用できます。

この記事でやること

本記事では、フレーム単位の動画処理を実装します。入力にはライブカメラの映像でも、ローカルマシンに保存された動画ファイルでも使用可能です。今回はローカルに保存した動画からフレームを切り出し、それらを指定した場所に保存するプログラムを作成します。

OpenCVのインストール

OpenCVはPythonの標準ライブラリではないため、別途インストールが必要です。pipコマンドを使えば簡単にインストールできます。

pip install opencv-python
Collecting opencv-python
Downloading https://files.pythonhosted.org/packages/49/4b/ad55a2e2c309fb698e1283e687129e0892c7864de9a4424c4ff01ba0a3bb/opencv_python-4.0.0.21-cp36-cp36m-win32.whl (22.1MB)
100% |████████████████████████████████| 22.1MB 141kB/s
Requirement already satisfied: numpy>=1.11.3 in c:\python\python361\lib\site-packages (from opencv-python) (1.13.0)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.0.0.21

動画ファイルの準備

今回使用する動画ファイル「I Miss You.mp4」はFドライブに保存されています。この動画をフレーム(サムネイル画像)に変換し、任意の場所に保存していきます。

【Python】OpenCVで動画からフレームを抽出して画像として保存する方法

コード:動画からフレームを抽出する

動画ファイルを読み込み、フレームを抽出して保存するプログラムは以下の通りです。

# ライブラリをインポート
import cv2
import os

# フレームを抽出する関数
def extractFrames(pathIn, pathOut):
    # フレーム画像を保存するディレクトリを作成
    os.mkdir(r'c:/users/rajesh/Desktop/data')
    # 動画ファイルを開いてキャプチャを開始
    cap = cv2.VideoCapture(pathIn)

    # カウンタ変数
    count = 0

    while cap.isOpened():
        # フレームを1枚ずつ読み込む
        ret, frame = cap.read()
        if ret == True:
            print('Read %d frame: ' % count, ret)
            # フレームをJPEGファイルとして保存
            cv2.imwrite(os.path.join(pathOut, "frame{:d}.jpg".format(count)), frame)
            count += 1
        else:
            break

    # すべての処理が完了したらキャプチャを解放
    cap.release()
    cv2.destroyAllWindows()

def main():
    extractFrames(r'f:/I Miss You.mp4', 'data')

if __name__ == "__main__":
    main()

コードのポイント解説

  • cv2.VideoCapture(pathIn):指定した動画ファイルを開きます。
  • cap.read():動画から1フレームずつ読み込みます。retは読み込みの成否(True/False)、frameは画像データを表します。
  • cv2.imwrite():読み込んだフレームを「frame0.jpg」「frame1.jpg」のように連番でJPEG形式に保存します。
  • cap.release():処理終了後にキャプチャを解放し、リソースを適切に閉じます。

補足:os.mkdir()は保存先フォルダが既に存在する場合にエラーになります。プログラムを再実行する可能性がある場合は、os.makedirs(pathOut, exist_ok=True)に置き換えると安全です。

実行結果

プログラムを実行すると、デスクトップ(指定した保存先)に「data」フォルダが自動的に作成され、その中に動画から抽出されたフレーム画像が連番で格納されていることが確認できます。

【Python】OpenCVで動画からフレームを抽出して画像として保存する方法

  1. PythonとOpenCVで実現するテンプレートマッチングの基本とマルチスケール対応

    テンプレートマッチングとは、実際の画像の中から、あらかじめ用意した小さな画像(テンプレート)と一致する部分を探し出す技術です。基本的にはパターンマッチングの一種であり、物体検出や顔認識など、さまざまなコンピュータビジョンのタスクの基礎となる手法です。PythonではOpenCVモジュールを使うことで、このマッチング処理を簡単に実装できます。本記事では、OpenCVのテンプレートマッチング機能を使った具体的な方法を解説します。OpenCVのインストールOpenCVの機能を利用するには、まずpipでライブラリをインストールします。sudo pip3 install opencv-python閾値(

  2. PythonとOpenCVを使って動画を逆再生(リバース再生)する方法

    OpenCVは「Open Source Computer Vision(オープンソース・コンピュータビジョン)」の略称です。この強力なライブラリを活用することで、画像や動画に対してさまざまな操作を実行できます。OpenCVの主な応用分野顔認識システムモーショントラッキング(動体追跡)人工ニューラルネットワーク深層ニューラルネットワーク動画ストリーミング などOpenCVのインストール方法Windows環境では、以下のコマンドでインストールできます。pip install opencv-pythonLinux環境の場合は、次のコマンドを使用します。sudo apt-get install pyt