2015年2月23日月曜日

保存された点群の表示

 Kinectからの点群データの取得はできるようになったはずなのでそのデータを以前に作ったViewerで表示する。
 一々プログラムを書き換えて読み込むファイルを指定するのは面倒なので引数を使用してPCDファイルならエラーなく読み込めるプログラムにする。尚前のViwerには、球体を表示する関数があったがそれは削除する。

コード

#include "stdafx.h"

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h> 
#include <pcl/io/pcd_io.h>

void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
     viewer.setBackgroundColor (1.0, 0.5, 1.0);
}

int _tmain(int argc, _TCHAR* argv[])
{


  pcl::PointCloud<pcl::PointXYZRGBA> cloud; //点群を入れる変数
    pcl::io::loadPCDFile (argv[1], cloud);//保存されている点群データの読み込み
    pcl::visualization::CloudViewer viewer("Cloud Viewer");//Viewerの作成
    viewer.runOnVisualizationThreadOnce (viewerOneOff);//背景色の設定

    viewer.showCloud(cloud.makeShared());//点群の表示
    while (!viewer.wasStopped ())
    {
    }
    return 0;
}


変更点はいつものように斜体+下線+太字の部分。ダブルスラッシュのあとにはその行の説明。この書き方だとドラッグ&ドロップでもプログラムを起動して表示できる。

動的に点群情報を変化させたりしない場合は、このViewerに点群を操作したり除去したりする機能を追加すればいい。 下の画像は実際にこのプログラムにファイルを読み込ませた結果。本来は色付きだったけど色は黒に一括変更されているものを使用した。
pcl::PointCloud<pcl::PointXYZRGBA> cloud; の PointXYZRGBA をPointXYZ などに変更すると色情報なしで表示できるようになる。
 

0 件のコメント:

コメントを投稿