注意,我定义的的是彩色点云,即:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
以下是彩色点云多视图可视化的一个模板:
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("viewer"));
int v1 = 0;
int v2 = 1;
viewer->createViewPort(0, 0, 0.5, 1, v1);//设置窗口点云显示范围
viewer->createViewPort(0.5, 0, 1, 1, v2);
viewer->setBackgroundColor(0, 0, 0, v1);//设置背景颜色
viewer->setBackgroundColor(0, 0, 0, v2);
//pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
viewer->addPointCloud(cloud, "cloud", v1);
viewer->addPointCloud(cloud_filtered, "want cloud", v2);
其中:
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("viewer"));
是一个可视化的标准模板,主要是设置窗口名称:
int v1 = 0;
int v2 = 1;
创建左右视图,这里的值我试了一下赋值多少都无所谓,没啥影响。
viewer->createViewPort(0, 0, 0.5, 1, v1);//设置窗口点云显示范围
viewer->createViewPort(0.5, 0, 1, 1, v2);
viewer->setBackgroundColor(0, 0, 0, v1);//设置背景颜色
viewer->setBackgroundColor(0, 0, 0, v2);
作用就是我批注的作用,creatViewPort(窗口x方向最小值,y方向最小值,x方向最大值,y方向最大值) ,显示窗口的x方向最大值为1最小值为0,y方向最大值为1最小值为0。代码中设置v1窗口的x方向最大值为0.5,最小值为0,y方向上最大值为1最小值为0。v2同理。所以v1、v2各占了显示窗口的一半,所以显示窗口被分为了两部分。
viewer->addPointCloud(cloud, "cloud", v1);
viewer->addPointCloud(cloud_filtered, "want cloud", v2);
将cloud和cloud_filtered分别添加到v1和v2中,“ ”内容相当于给这两片点云起个名字 。