2015年3月5日木曜日

PCD Viewerに機能追加

 以前記事に載せたPCDファイルを表示するプログラムはまさにPCDをファイルしか読み込めないので今回はこのプログラムを改良してVFHファイルも読み込んで表示できるようにする。自分が出力ファイルはひと目で分かるように「元となったファイル+”_***.pcd”」などの形式となっているのでファイル名によって判断を行う。

コード

#include "stdafx.h"

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <stdlib.h>
#include <pcl/visualization/histogram_visualizer.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;

    std::string fname = argv[1];
    unsigned int loc = fname.find("_vfh",0);
    if(loc == std::string::npos)
    {
        pcl::visualization::CloudViewer viewer("Cloud Viewer");
        pcl::io::loadPCDFile (argv[1], cloud);
        viewer.runOnVisualizationThreadOnce (viewerOneOff);
        viewer.showCloud(cloud.makeShared());
        while (!viewer.wasStopped ())
        {
        }
    }
    else{
        pcl::PointCloud<pcl::VFHSignature308>::Ptr vfhs (new pcl::PointCloud<pcl::VFHSignature308> ());
        pcl::io::loadPCDFile(argv[1], *vfhs);
        pcl::visualization::PCLHistogramVisualizer hist;
        hist.addFeatureHistogram(*vfhs,263,"id",640,200);
        std::cout << vfhs->points[0].histogram[308];

        while (1)
        {
            hist.spinOnce (100);
        }
    }
    return (0);
}

おそらくファイル内にある「FIELD」の項目によって機能の切り替えを行うべきなのかもしれないが今回はそれを行っていない。

0 件のコメント:

コメントを投稿