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点云数据处理基础❤️❤️❤️目录

以上是关于PCL:Visualizer 可视化❤️自定义颜色显示的主要内容,如果未能解决你的问题,请参考以下文章

PCL:如何更新 pcl::visualizer 中的法线云?

[译] Android Visualizer 可视化器的自定义实现

[译] Android Visualizer 可视化器的自定义实现

[译] Android Visualizer 可视化器的自定义实现

qt可视化教程点云不出现

pcl_visualizer.cpp 与 2015 构建错误