PCL:Visualizer 可视化❤️自定义颜色显示
Posted 没事就要敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL:Visualizer 可视化❤️自定义颜色显示相关的知识,希望对你有一定的参考价值。
点云附色有两种方式:
- 添加点云前附色;
- 添加点云后附色
注意: 点云附色不只限于PointXYZRGB类型,对所有PCL点云类型都适用
1 添加点云前附色
1.1 关键代码
在自定义着色处理对象PointCloudColorHandlerCustom中,可以为任意类型的点云附色,不仅限于 PointXYZRGB
。
1、创建一个PointCloudColorHandlerCustom对象,指定点云并设置颜色
pcl::visualization::PointCloudColorHandlerCustom<PointT> set_color(cloud, 125, 0, 125);
2、调用addPointCloud<>()完成对颜色处理器对象的传递
viewer->addPointCloud<pcl::PointXYZ>(cloud, set_color, "sample_cloud");
1.2 代码实现
#include <iostream>
#include <pcl\\io\\pcd_io.h>
#include <pcl\\visualization\\pcl_visualizer.h>
using namespace std;
typedef pcl::PointXYZ PointT;
int main()
{
//------------------------------------ 加载点云 ---------------------------------
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::PCDReader reader;
if (reader.read("tree.pcd", *cloud) < 0)
{
PCL_ERROR("\\a->点云文件不存在!\\n");
system("pause");
return -1;
}
cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
//==============================================================================
//------------------------------- 自定义颜色显示 --------------------------------
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("自定义颜色显示"));
//创建一个PointCloudColorHandlerCustom对象,指定点云并设置颜色
pcl::visualization::PointCloudColorHandlerCustom<PointT> set_color(cloud, 125, 0, 125);
viewer->addPointCloud<pcl::PointXYZ>(cloud, set_color, "sample_cloud");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample_cloud"); //设置点的大小
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(10000));
}
//==============================================================================
return 0;
}
1.3 结果展示
2 添加点云后赋色
2.1 关键代码
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.5, 0, 0.5, "sample_cloud");
2.2 代码实现
#include <iostream>
#include <pcl\\io\\pcd_io.h>
#include <pcl\\visualization\\pcl_visualizer.h>
using namespace std;
typedef pcl::PointXYZ PointT;
int main()
{
//------------------------------------ 加载点云 ---------------------------------
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::PCDReader reader;
if (reader.read("tree.pcd", *cloud) < 0)
{
PCL_ERROR("\\a->点云文件不存在!\\n");
system("pause");
return -1;
}
cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
//==============================================================================
//------------------------------- 自定义颜色显示 --------------------------------
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("自定义颜色显示"));
viewer->addPointCloud<PointT>(cloud, "sample_cloud"); //添加点云
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.5, 0, 0.5, "sample_cloud"); //设置点云显示的颜色
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample_cloud"); //设置点的大小
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(10000));
}
//==============================================================================
return 0;
}
2.3 结果展示
3 方法对比
- 颜色字段范围不同,前者 0 ~ 255,后者 0 ~ 1
- 两种方式的结果,一毛一样。
- 只是在可视化时显示不同的颜色,点云本身的颜色并没有改变
相关链接
以上是关于PCL:Visualizer 可视化❤️自定义颜色显示的主要内容,如果未能解决你的问题,请参考以下文章
PCL:如何更新 pcl::visualizer 中的法线云?
[译] Android Visualizer 可视化器的自定义实现
[译] Android Visualizer 可视化器的自定义实现