在点云可视化时,有时需要在一个视图窗口下展示两张点云图,方便对比。pcl::visualization::PCLVisualizer为加载多张点云图的可视化类,与常规的可视化类pcl::visualization::CloudViewer相比,该类不仅可以设置窗口背景色、点云的颜色信息,还能将一个窗口分为若干小窗口,同时加载多张点云图。
下面列出几行关键代码作分析:
int v1(0);
viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1);
viewer->setBackgroundColor(28, 28, 28, v1);
viewer->addText("Radius:0.01", 10, 10, "v1 text", v1);
pcl::visualization::PointCloudColorHandlerCustom source_color(source, 0, 0, 0);
viewer->addPointCloud(source, source_color, "sample cloud1", v1);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");
其中 viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1)中各参数依次为可视化小窗口的xmin,ymin,xmax,ymax,v1为该窗口的唯一标识,由于本文显示两张点云图,因此将xmax设置成1.0/2.0;viewer->setBackgroundColor(28, 28, 28, v1)为设置背景色RGB; viewer->addText("Radius:0.01", 10, 10, "v1 text", v1)为增加一个文本标签;PointCloudColorHandlerCustom
最后附上完整代码及显示情况。
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//***************************read PCD file*****************************************
//在一个视图下同时显示两张点云图像
pcl::PointCloud::Ptr source(new pcl::PointCloud());
pcl::PointCloud::Ptr source2(new pcl::PointCloud());
//输入点云路径
string filename1 = "jiancelou.pcd";
string filename2 = "jiancelou(4).pcd";
pcl::io::loadPCDFile(filename1, *source);
pcl::io::loadPCDFile(filename2, *source2);
cout << "点云加载成功!" << endl;
boost::shared_ptr< pcl::visualization::PCLVisualizer > viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer->initCameraParameters();
//在一个视图里显示两张点云图
int v1(0);
viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1);
viewer->setBackgroundColor(28, 28, 28, v1);
viewer->addText("Radius:0.01", 10, 10, "v1 text", v1);
pcl::visualization::PointCloudColorHandlerCustom source_color(source, 0, 0, 0);
viewer->addPointCloud(source, source_color, "sample cloud1", v1);
int v2(0);
viewer->createViewPort(1.0 / 2.0, 0.0, 1.0, 1.0, v2);
viewer->setBackgroundColor(28, 28, 28, v2);
viewer->addText("Radius:0.1", 10, 10, "v2 text", v2);
pcl::visualization::PointCloudColorHandlerCustom source_color2(source2, 0, 0, 0);
viewer->addPointCloud(source2, source_color2, "sample cloud2", v2);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");
viewer->addCoordinateSystem(1.0);
viewer->spin();
return 0;
}
该代码不仅限于同时显示两张点云,可根据需要增设小窗口,更改坐标参数等,就可同时显示多张点云图。
欢迎大家批评指正,可在评论区留言。