画像処理ライブラリ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()
0 件のコメント:
コメントを投稿