福岡人データサイエンティストの部屋

データサイエンスを極めるため、日々の学習を綴っています。

【OpenCV】Webカメラで録画してみた【Python】



こんにちは!こーたろーです。


今回は、OpenCVでのWebカメラで取り込んだ動画を保存していきます。


前回のWebカメラの取り込みの復習をしつつ、取り込んだデータを保存していきます。


それでは早速まいりましょう!


ライブラリのインポート



ライブラリは、前回Webカメラの動画を取り込んだときと同様に定義していきます。

import cv2
import numpy as np



OpenCVとnumpyを使っていきます。

パラメータの設定とインスタンスの作成



次に、動画を保存するときのパラメータと、動画取り込み用のインスタンスを作成していきます。

cap = cv2.VideoCapture(0)

fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
fps = 30
size = (1000, 600)

write = cv2.VideoWriter('WebCam.m4v', fmt, fps, size)



ます、cv2.VideoCaputureにて、Webカメラを指定します。カメラのデバイスIDは、検出した順番で0から割り当てられるため、PC内蔵のWebカメラのみの場合は0を引数に読み込めば大丈夫です。


fmtは、動画を保存するときのフォーマットになります。今回はm4v形式で保存するため、VideoWriter_forccにてフォーマットを定義します。


fpsはフレームレートです。1秒当たりのフレーム数で、「frame per second」と言います。今回は、1秒当たり30フレームとします。


また、動画の画面サイズ(1フレームのサイズ)を指定します。


最後に、writeというインスタンスを作ります。このインスタンスに、Webカメラから取り込んだ動画情報を保存していきます。


インスタンスは、cv2.VideoWriterで作成します。その時の引数として、ファイル名(拡張子つき)・フォーマット・フレームレート・画面サイズを指定します。

Webカメラの動画の取り込みと保存



インスタンスに対して、Webカメラ情報を読み込んでいきます。


今回は、リアルタイムでWebカメラを取り込んでいく処理にしています。


実際に画面にWebカメラの画像を表示させながら、どのような動画が撮影されていっているのかを確認するようにします。

while True:
    ret, frame = cap.read()
    
    frame = cv2.resize(frame, size)
    write.write(frame)
    cv2.imshow('WebCam', frame)
    
    if cv2.waitKey(1) == 13:
        break

write.release()
cap.release()
cv2.destroyAllWindows()



capで指定したWebカメラからの画像を読み込みます。


readで画像部分を取り込んで、resizeで指定のサイズに変更します。


その後、writeインスタンスにたいして、writeメソッドを使って、フレーム情報を書き込んでいきます。


それと同時に、読み込んだフレームをWindowで表示させるために、imshowメソッドを指定します。


While文は、この時、breakがあるまで実行を続けます。


waitKeyにて、1ミリ秒ごとに確認が入りますが、13(エンターキー)が押されるとbreakして、動画の取り込み及びWindowによるWebカメラの表示を解除します。(while文を抜けて、次の処理で終わる)





いかがでしたでしょうか。


これで、Webカメラからの動画の取り込みや保存を一通りやっていきました。


今後、この取り出したWebカメラのフレームデータに、いろいろな処理を施してみたいと思います。


ではでは。


OpenCVによる画像処理入門 改訂第2版 (KS情報科学専門書)