はじめに
OpenCV-Python を使ってビデオを扱う方法に関するこの実験へようこそ!OpenCV (Open Source Computer Vision) は、画像処理、機械学習、コンピュータビジョンアプリケーション向けに設計された強力なライブラリです。この実験では、OpenCV-Python でビデオを扱う方法に焦点を当てます。
OpenCV-Python を使ってビデオを扱う方法に関するこの実験へようこそ!OpenCV (Open Source Computer Vision) は、画像処理、機械学習、コンピュータビジョンアプリケーション向けに設計された強力なライブラリです。この実験では、OpenCV-Python でビデオを扱う方法に焦点を当てます。
ビデオをキャプチャするには、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
または、右上隅にあるこのようなボタン をクリックするだけで実行することもできます。
その後、ターミナルが「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
または、右上隅にあるこのようなボタン をクリックするだけで実行することもできます。
その後、ターミナルが「Video save successfully!」と出力されるのを待つと、プロジェクトフォルダに output.avi
という名前の出力ビデオが表示されます。ただし、現在の環境ではビデオファイルの閲覧はサポートされていません。下図のように、ファイルをローカルにダウンロードしてから、ビデオプレーヤーを使用して閲覧する必要があります。
おめでとうございます!OpenCV-Python を使ってビデオを読み取り、表示し、書き込み、保存する方法を学びました。これらの基本的なスキルを持って、より高度なコンピュータビジョン技術とアプリケーションを探求し始めることができます。
異なるビデオ形式を試したり、フレームにフィルターを適用したり、物体追跡や検出を試したりして、このチュートリアルを拡張してみてください。可能性は無限です!