ターミナル上で
lsusb
のコマンドを実行すると、USBポートに接続されたデバイスを列挙する。
guvcview
のコマンドでカメラ起動し、映像が出力される。
カメラ出力が選択できるが、MJPEGが最も低容量なのでこれを使おう。
1フレーム毎をJPEG形式で保存するため、画素情報が圧縮の過程で失われてしまう点については注意。
画素値の正確な取得を行いたい場合はBGR3を使用すべし。
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_V4L2 | Video for Linux 2 (V4L2) APIを使用してカメラデバイスにアクセスする。Linuxで使用する場合がある。 |
| cv2.CAP_DSHOW | DirectShow APIを使用してカメラデバイスにアクセスする。Windowsで使用する場合がある。 |
| cv2.CAP_MSMF | Microsoft Media Foundation APIを使用してカメラデバイスにアクセスする。Windowsで使用する場合がある。 |
戻り値はcv2.VideoCaptureクラスのインスタンスである。
cv2.VideoCaptureクラスには多数のメソッドが存在する。
以下の項で解説する。
cv2.VideoCapture.read()
カメラから1フレーム読み取りを行うメソッド。
引数を取らない。
戻り値は以下の2つ。
| ret | 画像の取得が成功したかどうかの結果。bool型。 |
| frame | 読み込まれた画像データ。BGRの画素情報を格納した3次元配列(高さ×幅×チャンネル数)。Numpy配列。 |
cv2.VideoCapture.release()
読み込んだ動画ファイルやカメラデバイスを閉じ、リソースを解放するメソッド。
引数を取らず、戻り値を返さない。
明示的にrelease()を実行しなくてもVideoCaptureオブジェクトのデストラクタが正常に実行されれば自動的にrelease()が実行される。
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(propId)
カメラまたは動画ファイルから設定値を取得するメソッド。 引数propIdはcv2.VideoCapture.setと同様。