点云库PCL学习笔记 -- 可视化 -- 1.简单的点云可视化

点云库PCL学习笔记 -- 可视化 -- 1.简单的点云可视化


  • 简单的点云可视化,可以使用以下的代码。
#include <pcl/visualization/cloud_viewer.h>
 //...
 void
 foo ()
 {
   pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;
   //... 为 cloud 添加对应的场景
   pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");	//创建 viewer 对象(视窗)
   viewer.showCloud (cloud);		//将 cloud 添加进去视窗进行可视化
   while (!viewer.wasStopped ())	//循环处理
   {
   }
 }

简单的点云可视化代码示例cloud_viewer.cpp

#include <pcl/visualization/cloud_viewer.h>		//类cloud_viewer头文件申明
#include <iostream>								//标准输入输出头文件申明
#include <pcl/io/io.h>							//I/O相关头文件申明
#include <pcl/io/pcd_io.h>						//PCD文件读取
    
int user_data;

/**********************************************************************************
函数是作为回调函数,在主函数中只注册一次 ,函数实现对可视化对象背景颜色的设置,添加一个圆球几何体
*********************************************************************************/    
void 
viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
    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);		//添加圆球的几何对象
    std::cout << "i only run once" << std::endl;
    
}
  
/***********************************************************************************
作为回调函数,在主函数中注册后每帧显示都执行一次,函数具体实现在可视化对象中添加一个刷新显示字符串
*************************************************************************************/  
void 
viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;		//用于刷新文字的字符串输入, count 用于计数
    viewer.removeShape ("text", 0);						//用于移除 ID:text 对象,用于刷新文字
    viewer.addText (ss.str(), 200, 300, "text", 0);		//添加文字: ss.str()为文字内容; (200, 300)为文字的位置; text为标签ID;
    
    //修正: 这里可能的竞争条件:(主函数中的 viewerPsycho 是单独线程中运行的)
    user_data++;
}
    
int 
main ()
{
	//定义并实例化一个PointCloud指针对象,储存 XYZRGBA 类型的点云数据
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);		
    pcl::io::loadPCDFile ("maize.pcd", *cloud);		//打开 maize.pcd 的PCD文件
    
    pcl::visualization::CloudViewer viewer("Cloud Viewer");		//创建视窗对象,并给视窗标题栏定义名称为 Cloud Viewer
    
    viewer.showCloud(cloud);	// showCloud 函数是同步的,在此处等待直到渲染显示为止
    
    viewer.runOnVisualizationThreadOnce (viewerOneOff);		//该注册函数在可视化时只调用一次
    viewer.runOnVisualizationThread (viewerPsycho);			//该注册函数在渲染输出时每次都调用
   
    while (!viewer.wasStopped ())
    {
    	//在此处可以添加其他处理
    	//请注意,这是在viewerPsycho的单独线程中运行的
    	user_data++;
    }
    return 0;
}

设置编译文件CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(cloud_viewer)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (cloud_viewer cloud_viewer.cpp)
target_link_libraries (cloud_viewer ${PCL_LIBRARIES})

编译
mkdir build
cd build/
cmake ..
make

执行程序

cd ..
./build/cloud_viewer

文件目录中含有一个maize.pcd的点云文件

结果如下:

在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值