昨日公開されたKinect SDKですが、データをOpenCVに接続するサンプルを勉強がてら作ってみました。
やった事はKienct SDKのサンプルプログラム(SkeletalViewer)をベースに、画像表示部分のデータポインタをOpenCVのIplImageにコピーしています。
とりあえずこんな感じ↓
あ~~ 部屋が狭い、汚い、ボロイ。
もともとのサンプルでは、Playerの部分はDepthデータに合わせてカラーで表示しているのですが、この部分は別ウィンドウに分けました。
ご興味があればサンプルプログラムはこちら↓よりダウンロードできます。
上記ファイルをダウンロード、解凍し、解凍したフォルダ(OpenCV)をKinectSDKのサンプルフォルダ
C:\Users\Public\Documents\Microsoft Research KinectSDK Samples\NUI\SkeletalViewer
に入れて下さい。(インクルードディレクトリ設定の都合上)
プログラムの終了は Skeletal Viewer のウィンドウの×ボタンで。
動作環境は
- Kinect SDKが動作する事。
- OpenCV2.2がインストールされている事。
です。
もう少しサンプルをスッキリさせたい気もしますが、もうすぐしたら、OpenCV2.3が公開されるでしょうから、ちょっと様子見で...
(2011.06.21追記)
と思ったら、kaorun55さんが、シンプルなソースコードを公開していました。
Kinect for Windows SDK beta で遊んでみた・その2(C++でOpenCV対応、OpenNIっぽく)
さすがですね。
ソースコードを見ていて気になったのが、深度データは16bitのバッファに格納されているのですが、16bit中の上位13bitが実際の深度データで、下位3bitにPlayerの番号が各画素ごとに割り振られていました。
また、深度データの解像度(320×240)を変えようと思ったのですが、出来ないのか???
(2011.06.21追記)
80×60にはできるらしい。ってデカくはできない!
コメント
いつもサイト拝見させていただいてます。参考にしてます。
kinectでの3D形状取得の情報があまりネットになくて困っているのですが、それに関してのエントリを書いていただけると助かります!!
コメント頂きありがとうございます。
『Kinectでの3D形状取得の情報』というのは具体的にはどのような事を期待されていますか?
例えば、このページ
http://imagingsolution.blog107.fc2.com/blog-entry-273.html
にあるような、深度データから立体に表示する方法なのか?
それとも3Dデータをつなぎ合わせたい!とかでしょうか?
上記ページに示しているのは、深度データを11bitで取得し、OpenGLで表示しています。
OpenGLはそれなりに大変なので、簡単に記事にまとめるのは難しいのですが、ネタの候補にはしたいとは思っています。