PCLのチュートリアルではリアルタイムにデータを取得→画面に表示を行っているのみで取得された点群データは保存されないので数行コードを足してやる必要がある。コードは以下
コード
#include "stdafx.h"
#include <pcl/io/openni_grabber.h> #include <pcl/visualization/cloud_viewer.h>
#include <pcl/io/pcd_io.h>
class SimpleOpenNIViewer { public: SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {} void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &cloud) { if (!viewer.wasStopped()) viewer.showCloud (cloud);
pcl::io::savePCDFileBinary("pointcloud.pcd", *cloud);
} void run () { pcl::Grabber* interface = new pcl::OpenNIGrabber(); boost::function<void (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr&)> f = boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1); interface->registerCallback (f); interface->start (); while (!viewer.wasStopped()) { boost::this_thread::sleep (boost::posix_time::seconds (1)); } interface->stop (); } pcl::visualization::CloudViewer viewer; }; int _tmain (int argc, _TCHAR* argv[]) { SimpleOpenNIViewer v; v.run (); return 0; }
以上
斜体+下線+太字にした部分はチュートリアルには無い部分でその部分で取得されたデー
タを保存する。
このコードではプログラムが終了した瞬間のデータを保存するだけなので、起動した瞬間
から全てのデータを1フレームずつ保存した場合は保存するファイル名を動的に変えたりする
必要がある。
0 件のコメント:
コメントを投稿