前に紹介したPCLのサンプルです。
前回のライブラリと組み合わせてKinectGrabberを作りました。PCLのバージョンは1.6です。
こんな感じで書けます。あとはコールバック関数内でcloudに対して処理を行えば、平面検出やラベリングを行うことができます。基本的にOpenNIGrabberと似た作りにしていますが、カラーとデプスを非同期にしていないので、こちらもpull requestいただければ^^;
#include <Windows.h>#include <NaturalSoftware.Kinect.PCL\KinectGrabber.h>
#include <pcl/visualization/cloud_viewer.h>
void main()
{
try {
// viewerを作る
pcl::visualization::CloudViewer viewer( "Kinect Viewer" );
// データ更新のコールバック関数
boost::function<void (const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr&)> f =
[&viewer](const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud) {
if (!viewer.wasStopped()) {
viewer.showCloud( cloud );
}
};
// Kinectの入力を作る
pcl::Grabber* grabber = new pcl::KinectGrabber();
grabber->registerCallback( f );
grabber->start();
while ( !viewer.wasStopped() ) {
::Sleep( 0 );
}
grabber->stop();
}
catch ( std::exception& ex ) {
std::cout << ex.what() << std::endl;
}
}