目录
显示点云自带的颜色信息(PointCloudColorHandlerRGBField)
根据点云的某个字段进行上色(PointCloudColorHandlerGenericField)
自定义单一颜色(PointCloudColorHandlerCustom)
随机上色(PointCloudColorHandlerRandom)
在使用PCLVisualizer进行点云显示的过程中,经常需要给点云上色,以区分不同类型的点云,经常用到的上色方法有:
1. 显示点云自带的颜色信息;
2. 根据点云的某个属性(字段)进行上色(例如:X,Y,Z等方向上不同颜色);
3. 自定义单一颜色(给某个点云显示同一个颜色);
4. 随机上色(由编译器随机给点云分配单一颜色);
设置背景颜色setBackgroundColor
背景颜色的rgb 的取值范围是 [0, 1] 而不是 [0, 255]
所以如果要设置背景颜色为指定rgb数值,需要除以255:
viewer->setBackgroundColor(double(bgColor.red()) / 255,
double(bgColor.green()) / 255,
double(bgColor.blue()) / 255);
设置rgb为(125,100,200)的背景颜色需按照如下方式:
viewer->setBackgroundColor(125.0 / 255,
100.0 / 255,
200.0 / 255);
显示点云自带的颜色信息(PointCloudColorHandlerRGBField)
boost::shared_ptr<pcl::visualization::PCLVisualizer> colorHandler(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Cloud"));
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
viewer->addPointCloud(cloud, rgb, "sample cloud");
return viewer;
}
这里用到了一个类 “PointCloudColorHandlerRGBField” 实际上用这种方法显示点云的自带颜色信息,感觉有点多此一举。可以直接 “viewer->addPointCloud(cloud, “sample cloud”);” 就能实现上述功能。
根据点云的某个字段进行上色(PointCloudColorHandlerGenericField)
boost::shared_ptr<pcl::visualization::PCLVisualizer> genericHandler(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Cloud"));
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> rgb(cloud, "y");
viewer->addPointCloud(cloud, rgb, "sample cloud");
return viewer;
}
常用的字段有:
- x
- y
- z
- normal_x (X方向上的法线)
- normal_y (Y方向上的法线)
- normal_z (Z方向上的法线)
- rgb (颜色)
- curvature (曲率)
自定义单一颜色(PointCloudColorHandlerCustom)
boost::shared_ptr<pcl::visualization::PCLVisualizer> customHandler(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> rgb(cloud, 0, 255, 255);
viewer->addPointCloud(cloud, rgb, "sample cloud");
return viewer;
}
这个类的功能就是为同一个点云中的点赋予相同的颜色,用于区分同一个窗口中的不同点云。值得注意的是,其中 rgb 的取值范围不是 [0, 1] 而是 [0, 255], 不然出来的点云是黑色的。
随机上色(PointCloudColorHandlerRandom)
boost::shared_ptr<pcl::visualization::PCLVisualizer> randomHandler(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer);
pcl::visualization::PointCloudColorHandlerRandom<pcl::PointXYZ> rgb(cloud);
viewer->addPointCloud(cloud, rgb, "sample cloud");
return viewer;
}
系统随机选择单一颜色进行上色。