ビデオの使い方入門

OpenCVOpenCVBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

OpenCV-Python を使ってビデオを扱う方法に関するこの実験へようこそ!OpenCV (Open Source Computer Vision) は、画像処理、機械学習、コンピュータビジョンアプリケーション向けに設計された強力なライブラリです。この実験では、OpenCV-Python でビデオを扱う方法に焦点を当てます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/fourcc("VideoWriter Fourcc") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/video_capture("VideoCapture") opencv/BasicOperationsGroup -.-> opencv/video_writer("VideoWriter") subgraph Lab Skills opencv/fourcc -.-> lab-14766{{"ビデオの使い方入門"}} opencv/imread -.-> lab-14766{{"ビデオの使い方入門"}} opencv/imwrite -.-> lab-14766{{"ビデオの使い方入門"}} opencv/video_capture -.-> lab-14766{{"ビデオの使い方入門"}} opencv/video_writer -.-> lab-14766{{"ビデオの使い方入門"}} end

ビデオの読み取りとフレームの保存

ビデオをキャプチャするには、VideoCapture オブジェクトを作成する必要があります。以下は、ビデオを読み取り、各フレームを frame フォルダに保存する例です。

ビデオのパスは /home/labex/project/video.mp4 です。

ファイルのパスは /home/labex/project/read_video.py です。

read_video.py ファイルを開きます。次に、以下のコードを入力します。

import cv2
import os

## Check if the 'frame' folder exists. Create it if it doesn't.
folder = os.path.exists('frame')
if not folder:
	os.makedirs('frame')
	print('new folder...')
	print('OK')
else:
	print('There is this folder!')

## Frame number
number = 0

## Create a VideoCapture object
cap = cv2.VideoCapture('video.mp4')

while True:
    ## Read a frame from the video
    ret, frame = cap.read()

    ## Frame number added
    number = number + 1
    if ret:
        ## Save the frame
        cv2.imwrite(f"./frame/save{number}.jpg", frame)

    ## Exit the loop
    else:
        break

print('Each frame has been saved to the frame folder')

print('Video read successfully!')

## Release the VideoCapture object
cap.release()

この例では、読み取りたいビデオファイルのパスを渡して VideoCapture オブジェクトを作成します。次に、while ループを使用して、read() メソッドを使ってビデオの各フレームを読み取ります。フレームが正常に読み取られた場合、imwrite() メソッドを使ってフレームを保存します。最後に、VideoCapture オブジェクトを解放します。

ターミナルで以下のコマンドを実行することができます。

python /home/labex/project/read_video.py

または、右上隅にあるこのようなボタンRun Python File をクリックするだけで実行することもできます。

その後、ターミナルが「Video read successfully!」と出力されるのを待つと、frame フォルダに各フレームの画像が表示されます。

ビデオの書き込みと保存

ビデオを書き込み、保存するには、VideoWriter オブジェクトを作成する必要があります。以下は、ビデオを書き込み、保存する方法の例です。

ビデオのパスは /home/labex/project/video.mp4 です。

ファイルのパスは /home/labex/project/write_video.py です。

write_video.py ファイルを開きます。次に、以下のコードを入力します。

import cv2

## Create a VideoCapture object
cap = cv2.VideoCapture('video.mp4')

## Get the video frame size and frame rate
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))

## Create a VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, fps, (width, height))

while True:
    ## Read a frame from the video
    ret, frame = cap.read()

    if ret:
        ## Process the frame
        #...

        ## Write the processed frame to the output video
        out.write(frame)

    else:
        break

print('Video save successfully!')

## Release the VideoCapture and VideoWriter objects
cap.release()
out.release()

この例では、読み取るビデオファイルのパスを渡して VideoCapture オブジェクトを作成します。次に、get() メソッドを使用してビデオのフレームサイズとフレームレートを取得します。その後、出力ファイル名、fourcc コード、フレームレート、およびフレームサイズを渡して VideoWriter オブジェクトを作成します。fourcc コードは、ビデオコーデックを指定するために使用される 4 バイトのコードです。この例では、XVID コーデックを使用しています。

次に、while ループを使用して、read() メソッドを使ってビデオの各フレームを読み取ります。フレームが正常に読み取られた場合、それを処理し(例えば、フィルターを適用し)、VideoWriter オブジェクトの write() メソッドを使用して出力ビデオに書き込みます。最後に、VideoCapture および VideoWriter オブジェクトを解放します。

ターミナルで以下のコマンドを実行することができます。

python /home/labex/project/write_video.py

または、右上隅にあるこのようなボタンRun Python File をクリックするだけで実行することもできます。

その後、ターミナルが「Video save successfully!」と出力されるのを待つと、プロジェクトフォルダに output.avi という名前の出力ビデオが表示されます。ただし、現在の環境ではビデオファイルの閲覧はサポートされていません。下図のように、ファイルをローカルにダウンロードしてから、ビデオプレーヤーを使用して閲覧する必要があります。

Download Video File
Download Video File

まとめ

おめでとうございます!OpenCV-Python を使ってビデオを読み取り、表示し、書き込み、保存する方法を学びました。これらの基本的なスキルを持って、より高度なコンピュータビジョン技術とアプリケーションを探求し始めることができます。

異なるビデオ形式を試したり、フレームにフィルターを適用したり、物体追跡や検出を試したりして、このチュートリアルを拡張してみてください。可能性は無限です!