#author("2025-05-20T14:32:54+09:00","","") #author("2025-05-22T13:00:34+09:00","","") [[FrontPage]] *ターミナル上でのカメラ操作 [#db3a4b05] ターミナル上で lsusb のコマンドを実行すると、USBポートに接続されたデバイスを列挙する。 guvcview のコマンドでカメラ起動し、映像が出力される。~ カメラ出力が選択できるが、MJPEGが最も低容量なのでこれを使おう。~ 1フレーム毎をJPEG形式で保存するため、画素情報が圧縮の過程で失われてしまう点については注意。~ 画素値の正確な取得を行いたい場合はBGR3を使用すべし。~ *OpenCVにおけるカメラ操作 [#m23284e4] **cv2.VideoCaptureクラス [#rd934a65] 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を区別した上で別々の変数に格納する必要がある。~ indexはUSBのポート番号に対応する。~ 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 [#e43bd09f] cv2.VideoCapture.read() カメラから1フレーム読み取りを行うメソッド。~ 引数を取らない。~ 戻り値は以下の2つ。~ |ret|画像の取得が成功したかどうかの結果。bool型。| |frame|読み込まれた画像データ。BGRの画素情報を格納した3次元配列(高さ×幅×チャンネル数)。Numpy配列。| ***cv2.VideoCapture.release [#d6460d0c] cv2.VideoCapture.release() 読み込んだ動画ファイルやカメラデバイスを閉じ、リソースを解放するメソッド。~ 引数を取らず、戻り値を返さない。~ 明示的にrelease()を実行しなくてもVideoCaptureオブジェクトのデストラクタが正常に実行されれば自動的にrelease()が実行される。~ ***cv2.VideoCapture.set [#zbbf43d9] 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 [#acd511e3] cv2.VideoCapture.get(propId) カメラまたは動画ファイルから設定値を取得するメソッド。 引数propIdはcv2.VideoCapture.setと同様。