NtKinect: Kinect V2 C++ Programming with OpenCV on Windows10

Kinect V2 でRGBカメラ画像を取得する(基本設定)


2016.07.13: created by
Japanese English
目次へ

前提条件

次のソフトウェアがインストールされていることを前提条件とします。インストールのパスが異なる場合は適宜読み替えて下さい。


NtKinectクラス: Kinect V2をC++ から簡単に利用するためのクラス

プログラム中で NtKinect クラスの変数を宣言すると Kinect V2 が初期化されて利用可能になります。

    #include "NtKinect.h"
    ...
    NtKinect kinect;     // 変数宣言

Kinect V2 の色々なセンサは、最初に利用したときに初期化されます。 たとえば RGB カメラは、最初に setRGB() メソッドを呼び出したタイミングで初期化されます。

    kinect.setRGB();    // RGB画像を取得する。最初の呼び出しでRGBカメラは初期化される。


Kinect V2 でRGBカメラ画像を取得する

Kinect V2 では 1920x1080 の解像度の RGB カメラ画像を取得できます。 OpenCVが BGR フォーマットまたは BGRA フォーマットを基本として用いていることから、 NtKinect では BGRAフォーマットを採用しています。

NtKinect

NtKinect の RGB 画像に関するメソッド

返り値の型 メソッド名 説明
void setRGB() RGB画像を取得し、publicなメンバ変数 rgbImage に設定する。
NtKinect

NtKinect の RGB 画像に関するメンバ変数

変数名 説明
cv::Mat rgbImage RGBカメラの画像。解像度は1920x1080でBGRAフォーマット。
画像の座標は ColorSpace 座標系における位置です。
  • rgbImage.cols --- 画像の横方向の解像度 (1920)
  • rgbImage.rows --- 画像の縦方向の解像度 (1080)
  • rgbImage.at<cv::Vec4b>(y , x ) --- 画像の (x , y ) 座標の画素にアクセスする
  •         cv::Vec4b pixel = rgbImage.at<cv::Vec4b>(y,x);
                piexel[0] // Blue
                piexel[1] // Green
                piexel[2] // Red
                piexel[3] // Alpha
    

プログラム作成の手順

  1. Visual Studio 2015 で新しいプロジェクトを開始します。
    1. 言語は"Visual C++"で、"Win32コンソール アプリケーション"を選択します。ここではプロジェクト名は"KinectV2"としています。



    2. Win32 アプリケーション ウィザードでは「次へ」を選択します。



    3. 「空のプロジェクト」にチェックを入れて「完了」を選択します。



  2. プロジェクトのターゲット アーキテクチャをx64に変更します。
  3. Visual Studio のウィドウ上部のメニューバーの中央付近に、コンパイルオプションを指定するウィンドウがありますので "x64" に変更します。




  4. プロジェクトのソースファイルに main.cpp を追加します。
  5. C++のソースファイルが少くとも1個プロジェクト中に存在しないと、 プロジェクトのプロパティでC/C++という項目が選択できません。 そのため、まずここで main.cpp を追加します。







  6. プロジェクトのプロパティを設定します。
    1. 「ソリューションエクスプローラ」からプロジェクト名"KinectV2"を右クリックして「プロパティ」を選択します。



    2. 「構成プロパティ」の「C/C++」「全般」「追加のインクルード ディレクトリ」にKinectとOpenCVのパスを追加します。
    3.   $(KINECTSDK20_DIR)inc
        D:\opencv\include



    4. 「構成プロパティ」の「リンカー」「全般」「追加のライブラリ ディレクトリ」にKinectとOpenCVのパスを追加します。
    5.   $(KINECTSDK20_DIR)Lib/x64
        D:\opencv\lib



    6. 「構成プロパティ」の「リンカー」「入力」「追加の依存ファイル」にKinectとOpenCVのライブラリを追加します。
    7.   Kinect20.lib
        opencv_world310.lib



  7. (重要)プロジェクトのヘッダーファイルに NtKinect.h ( this site, github ) を追加します。
  8. 上記のリンクから NtKinect.h をダウンロードして下さい。ファイルの置き場所は main.cpp などのソースファイルが置かれているフォルダです。 この例だと KinectV2/KinectV2/NtKinect.h になります。




    もしも追加してもincludeできないというエラーが起きる場合は、追加したファイルを 一旦削除してから、「ソリューションエクスプトーラー」の「ヘッダーファイル」を右クリックして メニューの中から「追加」「新しい項目」「VisualC++のヘッダーファイル(.h)」で 「名前」に"NtKinect.h"を指定して下さい。 新たに作成されたファイルにダウンロードしたファイルの内容をコピーして下さい。

  9. main.cppの内容を以下のように変更します。
  10. 赤い文字の部分を書き替えることで、Kinect V2 のいろいろな機能を簡単に利用できます。

    main.cpp
    #include <iostream>
    #include <sstream>
    
    #include "NtKinect.h"
    
    using namespace std;
    
    void doJob() {
      NtKinect kinect;
      while (1) {
        kinect.setRGB();
        cv::imshow("rgb", kinect.rgbImage);
        auto key = cv::waitKey(1);
        if (key == 'q') break;
      }
      cv::destroyAllWindows();
    }
    
    int main(int argc, char** argv) {
      try {
        doJob();
      } catch (exception &ex) {
        cout << ex.what() << endl;
        string s;
        cin >> s;
      }
      return 0;
    }
    

    ちなみに、 cv:: が付いているのは OpenCV の関数です。

    返り値の型 OpenCV の関数名 説明 マニュアル
    void imshow(cost string& winname, const Mat& image ) imagewinname という名前のウィンドウに表示する。 link
    int waitKey(int delay =0) キーの入力をdelay ミリ秒待つ。0は無限を意味する。 link
  11. プログラムを実行するとRGB画像が表示されます。'q' キーで終了します。



  12. サンプルのプロジェクトはこちら KinectV2.zip
  13. 上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。



http://nw.tsuda.ac.jp/