OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
Kinectおよびその他のOpenNI互換深度センサの利用

前のチュートリアル: OpenCVによる動画の作成
次のチュートリアル: Orbbec Astra 3Dカメラの使用

OpenNI互換の深度センサー(Kinect, XtionPRO, ...)は VideoCapture クラスを通じてサポートされている。深度マップ、BGR画像、その他いくつかの出力形式は、おなじみの VideoCapture インターフェースを使用して取得できる。

OpenCVで深度センサーを使用するには、次の準備手順を行う必要がある:

  1. OpenNIライブラリ(こちら http://www.openni.org/downloadfiles から)と OpenNI用 PrimeSensor Module(こちら https://github.com/avin2/SensorKinect から)をインストールする。インストールは、これらの製品の説明に記載されているデフォルトのフォルダに対して行う必要がある。例:
    OpenNI:
    Linux & MacOSX:
    Libs into: /usr/lib
    Includes into: /usr/include/ni
    Windows:
    Libs into: c:/Program Files/OpenNI/Lib
    Includes into: c:/Program Files/OpenNI/Include
    PrimeSensor Module:
    Linux & MacOSX:
    Bins into: /usr/bin
    Windows:
    Bins into: c:/Program Files/Prime Sense/Sensor/Bin
    一方または両方の製品が別のフォルダにインストールされた場合は、対応するCMake変数 OPENNI_LIB_DIR, OPENNI_INCLUDE_DIR, OPENNI_PRIME_SENSOR_MODULE_BIN_DIR を変更する必要がある。
  2. CMakeで WITH_OPENNI フラグを設定して、OpenNIサポート付きでOpenCVを構成する。OpenNIがインストールフォルダで見つかれば、OpenCVはOpenNIライブラリ付きでビルドされる(CMakeログの OpenNI のステータスを参照)。一方、PrimeSensor Modules が見つからない場合もある(CMakeログの OpenNI PrimeSensor Modules のステータスを参照)。PrimeSensorモジュールがなくても、OpenCVはOpenNIライブラリ付きで正常にコンパイルされるが、VideoCaptureオブジェクトはKinectセンサーからデータを取得できない。
  3. OpenCVをビルドする。

VideoCapture は次のデータを取得できる:

  1. data given from depth generator:
    • CAP_OPENNI_DEPTH_MAP - mm単位の深度値 (CV_16UC1)
    • CAP_OPENNI_POINT_CLOUD_MAP - メートル単位のXYZ (CV_32FC3)
    • CAP_OPENNI_DISPARITY_MAP - ピクセル単位の視差 (CV_8UC1)
    • CAP_OPENNI_DISPARITY_MAP_32F - ピクセル単位の視差 (CV_32FC1)
    • CAP_OPENNI_VALID_DEPTH_MASK - 有効なピクセル(遮蔽されていない、陰になっていない等)のマスク (CV_8UC1)
  2. data given from BGR image generator:
    • CAP_OPENNI_BGR_IMAGE - カラー画像 (CV_8UC3)
    • CAP_OPENNI_GRAY_IMAGE - グレー画像 (CV_8UC1)

深度センサーから深度マップを取得するには、VideoCapture::operator >> を使用する。例:

VideoCapture capture( CAP_OPENNI2 );
for(;;)
{
Mat depthMap;
capture >> depthMap;
if( waitKey( 30 ) >= 0 )
break;
}

複数のデータマップを取得するには、VideoCapture::grab と VideoCapture::retrieve を使用する。例:

VideoCapture capture(0); // or CAP_OPENNI2
for(;;)
{
Mat depthMap;
Mat bgrImage;
capture.grab();
capture.retrieve( depthMap, CAP_OPENNI_DEPTH_MAP );
capture.retrieve( bgrImage, CAP_OPENNI_BGR_IMAGE );
if( waitKey( 30 ) >= 0 )
break;
}

センサーのデータ生成器のプロパティを設定・取得するには、それぞれ VideoCapture::set と VideoCapture::get メソッドを使用する。例:

VideoCapture capture( CAP_OPENNI2 );
capture.set( CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE, CAP_OPENNI_VGA_30HZ );
cout << "FPS " << capture.get( CAP_OPENNI_IMAGE_GENERATOR+CAP_PROP_FPS ) << endl;

2種類のセンサーのデータ生成器(画像生成器と深度生成器)がサポートされているため、必要な生成器のプロパティを設定・取得するために使用すべき2つのフラグがある:

  • CAP_OPENNI_IMAGE_GENERATOR – 画像ジェネレータのプロパティにアクセスするためのフラグ。
  • CAP_OPENNI_DEPTH_GENERATOR – デプスジェネレータのプロパティにアクセスするためのフラグ。プロパティの取り得る2つの値のいずれも設定されていない場合、このフラグ値がデフォルトとして想定される。

一部のデプスセンサ(例えばXtionPRO)は画像ジェネレータを持たない。これを確認するには、CAP_OPENNI_IMAGE_GENERATOR_PRESENT プロパティを取得すればよい。

bool isImageGeneratorPresent = capture.get( CAP_PROP_OPENNI_IMAGE_GENERATOR_PRESENT ) != 0; // or == 1

必要なジェネレータ型を指定するフラグは、特定のジェネレータプロパティと組み合わせて使用する必要がある。OpenNIインターフェースを通じて利用可能なカメラについては、以下のプロパティがサポートされている:

  • For image generator:
    • CAP_PROP_OPENNI_OUTPUT_MODE – 3つの出力モードがサポートされている:デフォルトで使用される CAP_OPENNI_VGA_30HZ(画像ジェネレータはVGA解像度・30FPSの画像を返す)、CAP_OPENNI_SXGA_15HZ(画像ジェネレータはSXGA解像度・15FPSの画像を返す)、CAP_OPENNI_SXGA_30HZ(画像ジェネレータはSXGA解像度・30FPSの画像を返す。このモードはXtionPRO Liveでサポートされている)。デプスジェネレータのマップは常にVGA解像度である。
  • For depth generator:
    • CAP_PROP_OPENNI_REGISTRATION – デプスジェネレータの視点を変更することでデプスマップを画像マップへ再マッピングする処理を登録する(フラグが「on」の場合)、またはこの視点を通常の状態に設定する(フラグが「off」の場合)フラグ。レジストレーション処理の結果として得られる画像はピクセル単位で位置合わせされており、画像内の各ピクセルがデプス画像内のピクセルに対応していることを意味する。

      次のプロパティは取得のみ可能である:

    • CAP_PROP_OPENNI_FRAME_MAX_DEPTH – Kinectがサポートする最大デプス(mm単位)。
    • CAP_PROP_OPENNI_BASELINE – ベースライン値(mm単位)。
    • CAP_PROP_OPENNI_FOCAL_LENGTH – 焦点距離(ピクセル単位)。
    • CAP_PROP_FRAME_WIDTH – フレーム幅(ピクセル単位)。
    • CAP_PROP_FRAME_HEIGHT – フレーム高さ(ピクセル単位)。
    • CAP_PROP_FPS – フレームレート(FPS単位)。
  • Some typical flags combinations "generator type + property" are defined as single flags:
    • CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE = CAP_OPENNI_IMAGE_GENERATOR + CAP_PROP_OPENNI_OUTPUT_MODE
    • CAP_OPENNI_DEPTH_GENERATOR_BASELINE = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_BASELINE
    • CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_FOCAL_LENGTH
    • CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_REGISTRATION

詳細については、opencv/samples/cpp フォルダ内の使用例 videocapture_depth.cpp を参照すること。