pcl中用于显示点云的可视化类通常有两个,即CloudViewer类和PCLVisualizer类。
1.简单点云可视化,可以用几行代码可视化点云数据,即CloudViewer类。代码如下
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>// 包含相关头文件
typedef pcl::PointXYZ PointT;//定义点云类型
int main()
{
// 读取点云
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::io::loadPCDFile("name.pcd", *cloud);//读取点云文件
pcl::visualization::CloudViewer viewer("窗口名字");//给显示窗口起个名字
viewer.showCloud(cloud);
while (!viewer.wasStopped())
{
// todo::
}
system("pause");
return 0;
}
2.应用PCLVisualizer类,PCLVisualizer是PCL可视化3D点云的主要类。其内部实现了添加各种3D对象以及交互的实现等,比其他类实现的功能更齐全.其基础操作可以显示点云、网格、设置颜色、连线。代码如下
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>// 包含相关头文件
typedef pcl::PointXYZ PointT;//定义点云类型
int main()
{
// 读取点云
pcl::PointCloud<PointT>::Ptr cloud1(new pcl::PointCloud<PointT>);
pcl::io::loadPCDFile("name1.pcd", *cloud1);
pcl::PointCloud<PointT>::Ptr cloud2(new pcl::PointCloud<PointT>);
pcl::io::loadPCDFile("name2.pcd", *cloud2);
// 定义对象
pcl::visualization::PCLVisualizer viewer;
//设置背景颜色,默认黑色
viewer.setBackgroundColor(100, 100, 100); // rgb
// "cloud1" 为显示id,默认cloud,显示多个点云时用默认会报警告。
viewer.addPointCloud(cloud1, "cloud1");
pcl::visualization::PointCloudColorHandlerCustom<PointT> red(cloud2, 255, 0, 0); // rgb
// 将点云设置颜色,默认白色
viewer.addPointCloud(cloud2, red, "cloud2");
// 将两个点连线
PointT temp1 = cloud1->points[0];
PointT temp2 = cloud1->points[1];
viewer.addLine(temp1, temp2, "line0");
// 同样可以设置线的颜色,
//viewer.addLine(temp1, temp2, 255,0,0, "line0");
// --- 显示网格数据 ---
pcl::PolygonMesh mesh;
pcl::io::loadPLYFile("read.ply", mesh);
viewer.addPolygonMesh(mesh);
// 开始显示2种方法,任选其一
// 1. 阻塞式
viewer.spin();
// 2. 非阻塞式
while (!viewer.wasStopped())
{
viewer.spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
// 可添加其他操作
}
system("pause");
return 0;
}