前のチュートリアル: Orbbec 3Dカメラの利用 (UVC)
次のチュートリアル: UbuntuでのWayland highguiバックエンドの利用
| |
| 原著者 | Alessandro de Oliveira Faria |
| 互換性 | OpenCV >= 4.5.5 |
hardwares
注意: PerC SDKはRealSense SDKに置き換えられたため、このチュートリアルは部分的に古くなっている
Intel® RealSense SDKに対応した深度センサーは、VideoCaptureクラスを通じてサポートされる。深度マップ、RGB画像、その他いくつかの形式の出力は、VideoCaptureの使い慣れたインターフェースを使って取得できる。
OpenCVで深度センサーを使用するには、次の準備手順を行う必要がある:
- Intel RealSense SDK 2.0をインストールする(こちらから https://github.com/IntelRealSense/librealsense)。
- CMakeでWITH_LIBREALSENSEフラグを設定して、OpenCVをIntel RealSense SDKサポート付きで構成する。Intel RealSense SDKがインストールフォルダで見つかれば、OpenCVはIntel Realsense SDKライブラリとともにビルドされる(CMakeログのLIBREALSENSEステータスを参照)。
- OpenCVをビルドする。
VideoCapture は次のデータを取得できる:
- data given from depth generator:
- CAP_INTELPERC_DEPTH_MAP - 各ピクセルは16ビット整数である。値は物体からカメラのXY平面までの距離、すなわちデカルト深度を示す。(CV_16UC1)
- CAP_INTELPERC_UVDEPTH_MAP - 各ピクセルは0〜1の範囲の2つの32ビット浮動小数点値を含み、深度座標から色座標へのマッピングを表す。(CV_32FC2)
- CAP_INTELPERC_IR_MAP - 各ピクセルは16ビット整数である。値は反射したレーザービームの強度を示す。(CV_16UC1)
- data given from RGB image generator:
- CAP_INTELPERC_IMAGE - カラー画像。(CV_8UC3)
深度センサーから深度マップを取得するには、VideoCapture::operator >> を使用する。例:
VideoCapture capture( CAP_REALSENSE );
for(;;)
{
Mat depthMap;
capture >> depthMap;
if( waitKey( 30 ) >= 0 )
break;
}
複数のデータマップを取得するには、VideoCapture::grab と VideoCapture::retrieve を使用する。例:
VideoCapture capture(CAP_REALSENSE);
for(;;)
{
Mat depthMap;
Mat image;
Mat irImage;
capture.grab();
capture.retrieve( depthMap, CAP_INTELPERC_DEPTH_MAP );
capture.retrieve( image, CAP_INTELPERC_IMAGE );
capture.retrieve( irImage, CAP_INTELPERC_IR_MAP);
if( waitKey( 30 ) >= 0 )
break;
}
センサーのデータ生成器のプロパティを設定・取得するには、それぞれ VideoCapture::set と VideoCapture::get メソッドを使用する。例:
VideoCapture capture(CAP_REALSENSE);
capture.set( CAP_INTELPERC_DEPTH_GENERATOR | CAP_PROP_INTELPERC_PROFILE_IDX, 0 );
cout << "FPS " << capture.get( CAP_INTELPERC_DEPTH_GENERATOR+CAP_PROP_FPS ) << endl;
2種類のセンサーのデータ生成器(画像生成器と深度生成器)がサポートされているため、必要な生成器のプロパティを設定・取得するために使用すべき2つのフラグがある:
- CAP_INTELPERC_IMAGE_GENERATOR – イメージジェネレータのプロパティにアクセスするためのフラグ。
- CAP_INTELPERC_DEPTH_GENERATOR – デプスジェネレータのプロパティにアクセスするためのフラグ。プロパティの2つの可能な値のいずれも設定されていない場合、このフラグ値がデフォルトで想定される。
詳細については、opencv/samples/cpp フォルダ内の使用例 videocapture_depth.cpp を参照すること。