[PCL, OpenCV, Kinect] Point Cloud Library, Kinect for Windows SDKおよびOpenCVの併用

Tested with PCL 1.6.0, Kinect for Windows SDK v1.7 and OpenCV 2.4.3.

A project for Visual Studio 2010 is available. Check a link at bottom of the page.

PCL1.6.0,Kinect for Windows SDK v1.7とOpenCV2.4.3を併用し,

  1. Kienct SDKにてビデオとデプス画像をキャプチャ
  2. cv::Matクラスに流し込んで,以下の処理をすべてOpenCVのC++インタフェースで行う
  3. 処理結果をPCL Visualizerで表示する

ことが目的.いかにも画像処理的なものをOpenCVにお任せできるように(スケーリングとか反転とか,2値化とかです).

動作環境

私がコードを動かした環境はこちら.OSは64ビットですが,ビルドはWin32で行う事を目的とした構成です.

私の環境以外での動作は保証しません.

  • OpenCV 2.4.3
  • PCL 1.6.0 (All-in-one installer for 32-bit)
  • Microsoft Kinect for Windows SDK v1.7
  • Visual Studio 2010 Professional
  • Windows 7 Professional (64-bit)

ソースコード

(2012.04.20)座標系が直交系でなく間抜けだったので,直交座標系への変換をはさみました.

Kinect SDKのAPIはセンサ画像が鏡像であることを加味した変換を行うようですので,表示部に送り込む画像も反転前のものに変えています.

Visual Studio 2010 Professional向けのプロジェクトファイル一式は本ページ下のリンク(KinectCVwithPCL.zip)からダウンロードできます.

ご自由にお使いいただいて結構ですが,作者は動作を一切保証しませんのであしからず.

ソースコードの解説はやる気が出たら書きます.

PCL Visualizerは別スレッドですが,私自身の実装がまずいので,フレームレートがしょぼいです

(逆に言うと,Visualizerの動作が本体側に影響を及ぼすことはないはず).

もっと賢く書く方法はいくらでもあると思います.

動作例

Kinect SDKでVideo/Depthストリームをキャプチャし,cv::Matに変換したうえ,

これをPCLのcloudとしてPCL Visualizerに与えるコードの実行例がこちら.

PCL, Kinect and OpenCV

Kinect for Windowsを使わない場合のデモもあります.

たとえば,USBカメラで撮影した画像に対し,一定以上の明度を有する画素を前に出してみることも可能.

PCL and OpenCV

更新履歴

  • 2013.03.19 v.3 Globalized. Tested with PCL 1.6.0, Kinect for Windows SDK v1.7 and OpenCV 2.4.3.
  • 2012.04.20 v.2 バグ修正.Visualizerに送っていた点群を直交座標系に変換.伴って,生の(鏡像ではない)デプスを送るように変更
  • 2012.04.19 v.1 公開