2024年4月21日日曜日

【OpenCV】VideoCapture()によるカメラからの画像・動画撮影

 画像処理ライブラリOpenCVでカメラによる画像・動画撮影を行う場合VideoCapture()を使う。


OpenCVを使うにはインポートが必要。

import cv2



1. カメラによる画像撮影

 PC等デバイスに接続されているカメラを使用する場合、始めにcv2.VideoCapture()の引数にデバイス番号を与え、VideoCaptureオブジェクトを生成する。PCに接続しているカメラが1台の場合通常、デバイス番号は0となる。カメラから画像を読み出す場合、生成したVideoCaptureオブジェクトに対してread()を使う。戻り値はretval, imageの2つ。retvalには画像が取得できたかどうかが返され、戻り値はTrue,Falseとなる。imageには取得した画像が返される。

 デバイス番号0を指定しPCのカメラでVideoCaptureオブジェクトを生成、read()で画像を習得し、imwrite()で画像を保存する例。cap.release()VideoCaptureオブジェクトのメモリを開放している。

import cv2

cap = cv2.VideoCapture(0)
retval, image = cap.read()

cv2.imwrite('capture.png', image)

cap.release()


 カメラのフレームレート、画像サイズを取得するには、生成したVideoCaptureオブジェクトに対して、get()を適用する。get()の引数をcv2.CAP_PROP_FPSとすることでフレームレート、cv2.CAP_PROP_FRAME_WIDTHとすることで画像幅、cv2.CAP_PROP_FRAME_HEIGHTとすることで画像高さが取得できる

import cv2

cap = cv2.VideoCapture(0)

fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

print(fps, width, height)

 実行結果

30.0 640 480


2. カメラによる動画撮影

 カメラから動画を取得して保存する場合、VideoCapture()で取得した画像をVideoWriterオブジェクトに逐次追加する。この際に保存する動画サイズを取得画像と揃える必要がある。
次の例では
VideoCaptureオブジェクトcapの生成
②capのフレームレート、画像幅、高さの取得
VideoWriterオブジェクトoutの生成(コーデックmp4vを指定、フレームレート、画像幅、高さはcapと同じとする)
④capの読み出し、outへの書き込みを100回繰り返す
⑤cap,outのリリース
の手順でカメラから動画を撮影している。なお、cap.getによって取得した画像幅、高さはfloat型のためVideoWriterオブジェクトと幅、高さ指定の際にはint()で整数型に変更する。

import cv2

cap = cv2.VideoCapture(0)

fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
out = cv2.VideoWriter('video.mp4', fourcc, fps, (int(width), int(height))) 

for i in range(100):
    retval, image = cap.read()
    out.write(image)

cap.release()
out.release()     


3. リファレンス

OpenCV > VideoCapture Class Reference > VideoCapture()
OpenCV > VideoCapture Class Reference > VideoCaptureProperties
OpenCV > VideoCapture Class Reference > read()
OpenCV > VideoCapture Class Reference > release()

使用したバージョン:Python 3.10.4 / OpenCV 4.9.0

0 件のコメント:

コメントを投稿