Kinect Hackといえば点で部屋を3次元復元する動画が有名ですよね。
誰もが最初にしてみたいと思うはず!たぶん!
ということでOpenNIを使ってKinectセンサで取得した奥行き情報から3次元位置を求める方法を紹介します。
これも実はOpenNIを使えば簡単にできます。
この関数でできます。
DepthGenerator.ConvertProjectiveToRealWorld(座標数,奥行き情報の配列,現実座標の配列);
ということでサンプルプログラム
今回
void retrievePointCloudMap(Mat &depth,Mat &pointCloud_XYZ);
という関数を作りました。
これは引数に、深度画像と変換した現実座標を格納するMatクラスを渡しています。
現実座標を格納するMatクラスは
Mat pointCloud_XYZ(480,640,CV_32FC3,cv::Scalar::all(0));
と宣言しています。
CV_32FC3で
32 ビット 3チャンネル(x,y,z float型)を意味します。
なので、このプログラムでは深度データ取得後
retrievePointCloudMap(depth,pointCloud_XYZ);
を呼ぶことにより。
depthからの情報でpointCloud_XYZに変換された3次元座標の情報を格納することができます。
3次元座標にアクセスするには
OpenCV2のcv::Matから画素を取り出すで紹介した方法で取り出します。
または
次回は取り出した3次元位置座標をOpenGLで3D描画する方法を紹介しようかと思います。
ポイントクラウドというやつですね。
次回:
Kinect OpenNIによる3次元ポイントクラウド - 3次元描画
0 件のコメント:
コメントを投稿