pcl_viewer类

经常会遇到点云可视化的情况,这里记录一些viewer相关的代码,方便以后直接使用。


pcl源码第五章pcl_visualizer_demo.cpp介绍了各种情况的显示,如显示法线、鼠标键盘响应等。


一般在代码最后都要添加如下的主循环:

  while (!viewer.wasStopped ())
  {
    viewer.spinOnce ();
  }

显示点云,设置窗口背景颜色,将不同点云设置为不同的颜色,在第五章range_image_visualization.cpp中也有。

//这是siftdetect.cpp中的可视化部分
//创建对象,命名窗口为PCL Viewer
pcl::visualization::PCLVisualizer viewer("PCL Viewer"); 
//设置cloud_temp点云的颜色
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> keypoints_color_handler(cloud_temp, 0, 255, 0); 
//设置cloud_xyz点云的颜色
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color_handler(cloud_xyz, 255, 0, 0); 
//设置背景颜色
viewer.setBackgroundColor(0.0, 0.0, 0.0);
//添加点云,第二个参数就是之前设置的点云颜色,第三的参数"cloud"是点云的id
viewer.addPointCloud(cloud_xyz, cloud_color_handler, "cloud");
//添加点云,这里其实就是将关键点显示出来,"keypoints"是其id
viewer.addPointCloud(cloud_temp, keypoints_color_handler, "keypoints");
//设置cloud_temp的渲染属性,第一个参数是属性类型,这里是将点的大小设为7
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, "keypoints");

下面这个代码和上面实现的功能是一样的,只是使用了boost指针

boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color_handler(cloud, 255, 0, 0); 
viewer->addPointCloud(cloud, cloud_color_handler,"all_cloud");
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> harris_color_handler (cloud_harris, 0, 255, 0);
viewer->addPointCloud(cloud_harris,harris_color_handler,"harris");
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5, "harris");

cloudviewer类

pcl::visualization::CloudViewer viewer("Cloud Viewer");//创建对象
viewer.showCloud(cloud);//显示
viewer.setBackgroundColor (1.0, 0.5, 1.0);//背景

//添加圆球
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
viewer.addSphere (o, 0.25, "sphere", 0);

一个窗口显示几幅图

    boost::shared_ptr<pcl::visualization::PCLVisualizer> for_visualizer_v (new pcl::visualization::PCLVisualizer ("crophull display"));
	for_visualizer_v->setBackgroundColor(255,255,255);
 
	int v1(0);
	for_visualizer_v->createViewPort (0.0, 0.0, 0.33, 1, v1);//位置
	for_visualizer_v->setBackgroundColor (0, 255, 255, v1);//第一部分背景
	for_visualizer_v->addPointCloud (cloud,"cloud",v1);
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,255,0,0,"cloud");//“cloud”的颜色
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"cloud");//“cloud”点云点的大小
	for_visualizer_v->addPolygon<pcl::PointXYZ>(surface_hull,0,.069*255,0.2*255,"backview_hull_polyline1",v1);//添加多边形
 
	int v2(0);
	for_visualizer_v->createViewPort (0.33, 0.0, 0.66, 1, v2);	
	for_visualizer_v->setBackgroundColor (255,0, 255, v2);
	for_visualizer_v->addPointCloud (surface_hull,"surface_hull",v2);
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,255,0,0,"surface_hull");
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,8,"surface_hull");
	for_visualizer_v->addPolygon<pcl::PointXYZ>(surface_hull,0,.069*255,0.2*255,"backview_hull_polyline",v2);
 
	int v3(0);
	for_visualizer_v->createViewPort (0.66, 0.0, 1, 1, v3);
	for_visualizer_v->setBackgroundColor (255, 255, 0, v3);
	for_visualizer_v->addPointCloud (objects,"objects",v3);
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,255,0,0,"objects");
	for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"objects");
 
	while (!for_visualizer_v->wasStopped())
	{
 
		for_visualizer_v->spinOnce(1000);
	}
	system("pause")

效果:

猜你喜欢

转载自blog.csdn.net/yamgyutou/article/details/105123955
pcl