1. 程式人生 > >點雲視覺化方法——PCLVisualizer

點雲視覺化方法——PCLVisualizer

3D點雲視覺化可以通過rviz,cloud_viewer或者PCLVisualizer等方法進行視覺化,這些介紹PCLVisualizer的方法。

首先是載入點雲並顯示:

#include <iostream>
#include <pcl/visualization/pcl_visualizer.h>


int main(int argc, char **argv)
{
    int showpoint = 0;
    pcl::visualization::PCLVisualizer *viewer;
    //boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
    viewer = new pcl::visualization::PCLVisualizer("Cluster viewer");
    viewer->createViewPort (0.0, 0, 0.5, 1.0, showpoint);
    viewer->setBackgroundColor(0, 0, 0);
    
    pcl::PointCloud<pcl::PointXYZ>:: Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile ("/home/victor/catkin_ws/src/chapter6_tutorials/data/cup.pcd", *cloud);

    for(int i=0;i<cloud->size();i++)
    {
	cloud->points[i].x=cloud->points[i].x/100.;
	cloud->points[i].y=cloud->points[i].y/100.;
	cloud->points[i].z=cloud->points[i].z/100.;
	//std::cout << cloud.points[i].x << std::endl;

    }
    viewer->addPointCloud<pcl::PointXYZ> (cloud, "Cluster viewer",showpoint);
    viewer->spin();   //這行必須有,不然不會顯示點雲
    
    return 0;
}


建立點雲並顯示:

#include <iostream>
#include <pcl/visualization/pcl_visualizer.h>


int main(int argc, char **argv)
{
    int showpoint = 0;
    //pcl::visualization::PCLVisualizer *viewer;
    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
    //viewer = new pcl::visualization::PCLVisualizer("Cluster viewer");
    viewer->createViewPort (0.0, 0, 0.5, 1.0, showpoint);
    viewer->setBackgroundColor(0, 0, 0);
    
    pcl::PointCloud<pcl::PointXYZ> cloud;
    //pcl::io::loadPCDFile ("/home/victor/catkin_ws/src/chapter6_tutorials/data/cup.pcd", cloud);
    cloud.height = 100;
    cloud.width = 100;
    cloud.points.resize(cloud.height * cloud.width);

    for(int i = 0; i < cloud.points.size(); i++){
        cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
        cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
        cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
    }

    for(int i=0;i<cloud.size();i++)
    {
	cloud.points[i].x=cloud.points[i].x/10.;
	cloud.points[i].y=cloud.points[i].y/10.;
	cloud.points[i].z=cloud.points[i].z/10.;
	//std::cout << cloud.points[i].x << std::endl;

    }
    viewer->addPointCloud<pcl::PointXYZ> (cloud.makeShared(), "Cluster viewer",showpoint);
    viewer->spin();
    
    return 0;
}