FrontPage

ターミナル上でのカメラ操作

ターミナル上で

lsusb

のコマンドを実行すると、USBポートに接続されたデバイスを列挙する。

guvcview

のコマンドでカメラ起動し、映像が出力される。
カメラ出力が選択できるが、MJPEGが最も低容量なのでこれを使おう。
1フレーム毎をJPEG形式で保存するため、画素情報が圧縮の過程で失われてしまう点については注意。
画素値の正確な取得を行いたい場合はBGR3を使用すべし。

OpenCVにおけるカメラ操作

cv2.VideoCaptureクラス

OpenCVにおける動画のキャプチャにはcv2.VideoCaptureクラスを使用する。
以下はそのコンストラクタ。

cv2.VideoCapture(index, apiPreference)

引数は以下の通り。

index(必須)ビデオキャプチャデバイスのID。0,1,2などの整数を設定する。
apiPreference(任意)ビデオキャプチャデバイスのアクセスに使用するAPIの優先度を指定するためのオプション引数。この引数を使用することで、特定のカメラAPIを優先的に選択したり、デフォルトのAPI選択動作を調整したりすることができる。(デフォルトはcv2.CAP_ANY)

カメラが1台しか接続されていない場合、カメラのデバイスIDは0になるため、indexには0を与えれば良い。
2台以上カメラを用いる場合はindexを区別した上で別々の変数に格納する必要がある。

apiPreferenceには、以下のようなものがある。
基本的にデフォルトで問題ない。

cv2.CAP_ANY利用可能なすべてのカメラAPIを試行し、最初に利用可能なものを選択する。(デフォルト値)
cv2.CAP_V4L2Video for Linux 2 (V4L2) APIを使用してカメラデバイスにアクセスする。Linuxで使用する場合がある。
cv2.CAP_DSHOWDirectShow APIを使用してカメラデバイスにアクセスする。Windowsで使用する場合がある。
cv2.CAP_MSMFMicrosoft Media Foundation APIを使用してカメラデバイスにアクセスする。Windowsで使用する場合がある。

戻り値はcv2.VideoCaptureクラスのインスタンスである。
cv2.VideoCaptureクラスには多数のメソッドが存在する。
以下の項で解説する。

cv2.VideoCapture.read

cv2.VideoCapture.read()

カメラから1フレーム読み取りを行うメソッド。
引数を取らない。
戻り値は以下の2つ。

ret画像の取得が成功したかどうかの結果。bool型。
frame読み込まれた画像データ。BGRの画素情報を格納した3次元配列(高さ×幅×チャンネル数)。Numpy配列。

cv2.VideoCapture.release

cv2.VideoCapture.release()

読み込んだ動画ファイルやカメラデバイスを閉じ、リソースを解放するメソッド。
引数を取らず、戻り値を返さない。
明示的にrelease()を実行しなくてもVideoCaptureオブジェクトのデストラクタが正常に実行されれば自動的にrelease()が実行される。

cv2.VideoCapture.set

cv2.VideoCapture.set(propId, value)

カメラまたは動画ファイルの設定を変更するメソッド。
引数は以下の通り。

propId(必須)VideoCapturePropertiesで定義されている識別子
value(必須)プロパティに設定する値。float型。

valueはfloat型なので、整数を代入すると型変換される。

cv2.VideoCaptureクラスでサポートされているプロパティを指定すると、戻り値Trueが返される。
なお、戻り値はプロパティがサポートされているかのみを示し、設定が正しく行われたかを示すわけではないので注意。
propIdで設定できるプロパティは多岐に渡るが、以下に代表的なプロパティの一覧を示す。

プロパティ対象説明
cv2.CAP_PROP_FRAME_WIDTHカメラおよび動画ファイルフレームの幅を設定または取得。
cv2.CAP_PROP_FRAME_HEIGHTカメラおよび動画ファイルフレームの高さを設定または取得。
cv2.CAP_PROP_FPSカメラおよび動画ファイルフレームレート(FPS)を設定または取得。
cv2.CAP_PROP_FOURCCカメラおよび動画ファイルビデオコーデックを設定または取得。fourcc(Four Character Code)を使用して指定。
cv2.CAP_PROP_FORMATカメラおよび動画ファイルフレームデータのフォーマットを取得。
cv2.CAP_PROP_BRIGHTNESSカメラ明るさを設定または取得。
cv2.CAP_PROP_CONTRASTカメラコントラストを設定または取得。
cv2.CAP_PROP_SATURATIONカメラ彩度を設定または取得。
cv2.CAP_PROP_HUEカメラ色相を設定または取得。
cv2.CAP_PROP_GAINカメラゲインを設定または取得。
cv2.CAP_PROP_EXPOSUREカメラ露出を設定または取得。
cv2.CAP_PROP_AUTOFOCUSカメラオートフォーカスの有効/無効を設定または取得。
cv2.CAP_PROP_SHARPNESSカメラ鮮明度を設定または取得。
cv2.CAP_PROP_ZOOMカメラズームを設定または取得。
cv2.CAP_PROP_PANカメラパン(水平方向のカメラの位置)を設定または取得。
cv2.CAP_PROP_TILTカメラチルト(垂直方向のカメラの位置)を設定または取得。
cv2.CAP_PROP_AUTO_EXPOSUREカメラオート露出を設定または取得。
cv2.CAP_PROP_POS_MSEC動画ファイル動画ファイルの現在の再生位置(ミリ秒単位)を取得または設定。
cv2.CAP_PROP_POS_FRAMES動画ファイル動画ファイルの現在のフレーム位置を取得または設定。
cv2.CAP_PROP_POS_AVI_RATIO動画ファイル動画ファイルの相対位置: 0 =「動画ファイルの先頭」、1 =「動画ファイルの終わり」。
cv2.CAP_PROP_FRAME_COUNT動画ファイル動画ファイル内の総フレーム数を取得。

cv2.VideoCapture.get

cv2.VideoCapture.get(propId)

カメラまたは動画ファイルから設定値を取得するメソッド。 引数propIdはcv2.VideoCapture.setと同様。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS