2015-02-11 312 views
0

我必须使用点云库访问点云中点的颜色属性。任何帮助表示赞赏。如何从点云中获取颜色信息并显示它?

当前我正在使用它来显示云。但它只显示红色蓝色绿色,而不是对象的实际颜色。

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (
    new pcl::visualization::PCLVisualizer ("3D Viewer") 
); 

viewer->setBackgroundColor (0, 0, 0); 
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud); 
viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "sample cloud"); 
viewer->setPointCloudRenderingProperties (
     pcl::visualization::PCL_VISUALIZER_POINT_SIZE 
    , 3 
    , "sample cloud" 
); 

viewer->addCoordinateSystem (1.0); 
viewer->initCameraParameters(); 
+0

代码是正确的,但在这种情况下设置颜色处理程序是多余的。使用'viewer-> addPointCloud(云,“样本云”)将点云添加到可视化器中应该足够了;' – taketwo 2015-02-12 15:14:40

+0

如果我取出颜色处理器,则云的颜色只是白色。 – RoboticsNovice 2015-02-16 11:57:15

回答

0

您的代码对我来说似乎没问题,您如何设置云的颜色?

pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>); 

pcl::PointXYZRGB point; 

// ... 

uint32_t rgb = (static_cast<uint32_t>(255) << 16 | 
       static_cast<uint32_t>(15) << 8 | 
       static_cast<uint32_t>(15)); 

point.rgb = *reinterpret_cast<float*>(&rgb); 

point_cloud_ptr->points.push_back(point); 
+0

可以单独访问颜色通道:'point.r = 255; point.g = 15; point.b = 15;',从而避免显式转换和投射。 – taketwo 2015-02-12 15:16:24

+0

哪个PCL版本? r/g/b的范围是多少?你有没有尝试过移位/施放方法? – Kornel 2015-02-12 15:22:39

+0

不幸的是,我不能告诉你在哪个版本中引入了这个版本,但是很久以前。我记得2012年夏天使用'r','g'和'b'。范围是'[0..255]'。 – taketwo 2015-02-12 15:43:49

相关问题