目次 このページのソースコードを表示

OpenCVで二つのWEBカメラを用いたステレオカメラの実装

公開日:
更新日:

ステレオカメラは,空間の深度を測定するのに使われます.本稿では,二台のウェブカメラを用いてステレオカメラを実装します.ある程度のロバスト性を確保するため,キャリブレーションも行います.

結果,以下のような深度画像を得ることができた.

結果画像
結果画像

ステレオカメラの準備

"LOGICOOL ウェブカム HD画質 120万画素 C270" を二つ用意し,水平になるように並べて固定します.

ステレオカメラ
ステレオカメラ

ダウンロード

今回使用するpythonスクリプトをダウンロードします.

OpenCV-StereoCamera

ファイル構成

  • OpenCV-StereoCamera
    • chessboard
      • chessboard_A.pdf
      • chessboard_B.png
    • lib
    • camera_shutter.py
    • stereo_camera_shutter.py
    • camera_calibrate.py
    • stereo_camera_calibrate.py
    • stereo.py
環境の用意をしてください

本稿では, 主にpythonとopenCVを使用していきます. これらの環境を整えてください.

左右のカメラデバイス番号の把握

二つのカメラを接続します.

camera_shutter.py内の上部にある,CAMERA_DEVISEを0から始まる番号で適宜変えていき, camera_shutter.pyを実行します.

実行画面で表示されるカメラ画像から左右のカメラを把握し,対応するデバイス番号を覚えておきます.

camera_shutter.pyの仕様

sキーでカメラ撮影,qキーでプログラム終了.撮影した画像は,imagesフォルダに格納されます.

キャリブレーション

二つのカメラの製品は同じでも,個体差があり,同じ姿勢で同じシーンを撮影しても得られる画像は異なります. そのため,二つのカメラにある差を補正するため,キャリブレーションを行います.

ディスプレイにダウンロードしたチェスボード画像(chessboard_A.pdf)を表示させます.

チェスボード表示
チェスボード表示

stereo_camera_shutter.pyを実行し,様々な角度でチェスボードの写真を撮ります.撮る角度は,左右,上下,正面,斜めなど様々な角度で撮ります.

撮った写真は,imagesフォルダに蓄積されます.

撮影画像(左)
撮影画像(左)
撮影画像(右)
撮影画像(右)

stereo_camera_calibrate.pyを実行しキャリブレーションを行います.キャリブレーションデータは,ファイル’stereo_calibarate_data.json’に保存されます.

実行

最後に,stereo.pyを実行し,デプス画像を得ます.

結果画像
結果画像
「https://contentsviewer.work/Master/image-processing/stereo-camera-with-web-cameras/article」から取得