ビデオを表示する

カメラからビデオをキャプチャする

時に,Webカメラのライブ映像をキャプチャしなければならないときがあるでしょう.OpenCVはそのためのシンプルなインターフェースを提供しています.カメラからの映像をキャプチャして,グレースケールに変換して表示してみましょう(私はUSBウェブカメラを使用しています).始めるためのタスクは本当にシンプルです.

ビデオをキャプチャするためにはVideoCaptureオブジェクトを作る必要があります.引数はデバイスのインデックス値かビデオファイルの名前です.デバイスのインデックスはそれぞれのカメラに固有の単なる数字です.通常は一つのカメラが接続されています(私の場合は).二つ目以降のカメラは1ずつ数値を変えれば選択できます.その後,フレームbyフレームでキャプチャできます.ただ,最後にキャプチャをリリースするのを忘れてはいけません.

カメラ映像をグレースケールに変換して表示するプログラム

実行結果
cap_video_from_cam

cap.read()の戻り値はbool(True/False)です.フレームが正しく読み込めていればTrueになります.戻り値でビデオの終わりをチェックすることができます.

時々,capがキャプチャを初期化しない時があります.その場合はコードエラーが表示されます.初期化されているかどうかはcap.isOpend()メソッドで確認することできます.Trueであれば問題ありません.またはcap.open()でオブジェクトの示すポインタを開くことができます.

cap.get(propId)メソッドを使ってビデオの特徴を知ることができます.propIdは0から18の数字で,それぞれの数字はビデオのプロパティを示しています.いくつかの値はcap.set(propId, value)を使うことで変更できます.Valueには設定したい値を入力します.

例えば,フレームのwidthとheightはcap.get(3)cap.get(4)で調べることができます.

cap.getメソッドで取得したフレームサイズを表示させた実行画面
cap_video_from_cam_with_prop

私の場合デフォルトで640×480になっていました.320×240に変更したいのでret = cap.set(3, 320)とret = cap.set(4,240)を追加します.

変更後の実行画面
cap_video_from_cam_modify

もしカメラの映像が真っ暗であったり,エラーが出たときは,他のアプリケーションでカメラを使用していないか確認してください.

ファイルからビデオを再生する

変更はカメラインデックスをビデオファイルの名前にすることだけで,あとはカメラからのキャプチャと同じです.フレームを表示している間は,正しい時間をcv2.waitKey()で使用してください.低すぎると高速になり,高すぎるとスローになります.通常は25ミリ秒が良いでしょう.

ファイルからビデオを再生するプログラム

実行画面
play_video_from_file

ffmpegやgstreamerの適切なバージョンを確認してインストールしてください.もっぱらffmpeg/gstreamerの誤ったインストールのために,Video Captureで頭が痛くなるような動作が発生することがあります.

ビデオを保存する

ビデオをキャプチャして,フレームbyフレームで処理したものは保存しておきたいです.画像ならcv2.imwrite()を使えば非常にシンプルにできることですが,ここでは少し操作が必要です.

ここではVideoWriterオブジェクトを作成します.出力されるファイルの名前(eg: output.avi)をFourCCコードを指定します(詳細は次の後で説明します).次にfpsとフレームサイズを入力します.最後はisColorフラグです.Trueならばエンコーダはカラーのフレームとみなし,それ以外ならばグレースケールのフレームとみなし機能します.

FourCCはビデオコーデックを指定するための4バイトコードです.利用可能なコードはfourcc.orgで確認できます.利用可能なコーデックはプラットフォームに依存します.

FourCCコードはMJPGの場合は cv2.VideoWriter_fourcc('M','J','P','G') あるいは cv2.VideoWriter_fourcc(*'MJPG') として指定できます.

下のコードではカメラをキャプチャして,垂直方向にすべてのフレームを逆転させ保存しています.

カメラ映像を垂直方向に逆転させて保存するプログラム

実行結果
save_a_video save_a_video_output

sukanpin has written 18 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>