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;
}