ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

OpenCV2.3RCのOpenNIでKinectを使う


先日リリースされたOpenCV 2.3(RC)では、OpenNIをサポートして、Kinectを簡単に扱えるようになったみたいです。
早速試してみたところ、本当に簡単でびっくりしましたw
サンプルプロジェクト一式はこちら

環境

環境の作成

  1. 通常のOpenNI環境を作成します
  2. OpenCV 2.3 RCのインストールは、念のためソースから行いました
  3. ざっくりとしたインストール手順
    1. OpenCV 2.3 RCのソースをダウンロード
    2. CMakeをインストール()
    3. CmakeでOpenNIオプションを追加し、Visual Studioのソリューションを作成
    4. 作成されたソリューションをビルド
    5. 同じくINSTALLプロジェクトをビルド
    6. 「build\install」以下にファイルができるので、「C:\OpenCV-2.3.0」以下にコピー
    7. 「C:\OpenCV-2.3.0\bin」へパスを通す
  4. サンプル作成
    1. Visual Studioでコンソールプロジェクトを作成する
    2. インクルードパスにOpenCVのパスを追加する
      • たとえば「C:\OpenCV-2.3.0\include」
    3. ライブラリパスにOpenCVのパスを追加する
      • たとえば「C:\OpenCV-2.3.0\lib」
    4. ライブラリを追加する
    5. 以下のコードを入力し、ビルドをする
#include <iostream>

#include <opencv2/opencv.hpp>

void main()
{
  try {
    char* name = "openni";
    cv::namedWindow( name );

    cv::VideoCapture     capture( CV_CAP_OPENNI );
    while ( 1 ) { 
      // データの更新を待つ
      capture.grab(); 

      // RGBを取得して表示
      cv::Mat  rgbImage;
      capture.retrieve( rgbImage, CV_CAP_OPENNI_BGR_IMAGE ); 
      cv::imshow( name, rgbImage );

      if ( cv::waitKey( 10 ) >= 0 ) {
        break; 
      }
    }

    cv::destroyAllWindows();
  }
  catch ( ... ) {
    std::cout << "exception!!" << std::endl;
  }
}

まとめ

とても簡単^^;
depthの表示がよくわからないので、あとで調べる(たぶん)
Xtionで使う方法もあるそうです

バックログ

  • 複数Kinectの扱い
  • CのAPI、COMインタフェースを生で使うサンプル
  • OpenCV 2.3のOpenNI対応の調査
    • カメラ画像の取得
    • 距離データの取得
  • KinectラッパーのDoxygen作成
  • 取得した骨格情報に追従してカメラ角度を変更
  • 音関係