Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

PCL + RGBDカメラ

目標

Microsoft KinectASUS XtionといったRGBDカメラを使って取得できるRGBD画像から生成した色付き点群を,PCLのウィンドウ上に描画する. 尚,前回作ったVisual Studioのプロジェクトを基にして実装する.前回の記事は以下を参照のこと.

実装環境

プログラム

ここの記事を大いに参考にした. ただし,一部,OpenNI2用に変更した.

#include <pcl/common/spring.h>
#include <pcl/io/openni2_grabber.h>
#include <pcl/visualization/cloud_viewer.h>
#include <exception>

class SimpleOpenNI2Viewer
{
public:
    pcl::visualization::CloudViewer viewer;

    SimpleOpenNI2Viewer() : viewer("PCL OpenNI2 Viewer")
    {
    }

    void cloudCallback(const pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr &cloud)
    {
        if (!viewer.wasStopped())
        {
            viewer.showCloud(cloud);
        }
    }

    void run()
    {
        try
        {
            pcl::Grabber* interface = new pcl::io::OpenNI2Grabber();

            boost::function<void(const pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr&)> f =
                boost::bind(&SimpleOpenNI2Viewer::cloudCallback, this, _1);

            interface->registerCallback(f);

            interface->start();

            while (!viewer.wasStopped())
            {
                Sleep(1);
            }

            interface->stop();
        }
        catch (std::exception& e)
        {
            cout << e.what() << endl;
        }
    }
};

int main()
{
    SimpleOpenNI2Viewer v;
    v.run();
    return 0;
}

結果

動いた!目標達成です.以下の画像は,ASUS Xtion Pro Liveを使って撮影した結果.Microsoft Kinect v1を用いると左右反転した結果が得られたので,何らかの設定で「Mirroring」を無効にする必要がありそうだ.

f:id:Mugichoko:20170426223637j:plain