pcl中set程序_pcl可视化的那些事

可视化:一目了然

如题所示,可视化的重要性不必多说。在点云数据预处理中,要想知道点云的形状需要可视化; 要想了解精简/去噪/简化/压缩 的结果需要可视化; 配准中,对应点对的显示/对应点对的去除结果/配准变化的过程 需要可视化 ...

pcl_viewer

linux 下可直接在命令行输入 pcl_viewr path/to/.pcd或.vtk可直接显示pcl中的点云文件。

pcl_viewr几个常用的命令:

r键: 重现视角。如果读入文件没有在主窗口显示,不妨按下键盘的r键一试。

j键:截图功能。

g键:显示/隐藏 坐标轴。

鼠标:左键,使图像绕自身旋转; 滚轮, 按住滚轮不松,可移动图像,滚动滚轮,可放大/缩小 图像; 右键,“原地”放大/缩小。

-/+:-(减号)可缩小点; +(加号),可放大点。

pcl_viewe -bc r,g,b /path/to/.pcd:可改变背景色.

pcl_viewer还可以用来直接显示pfh,fpfh(fast point feature histogram),vfh等直方图。

常用的pcl_viewer 好像就这些,其他未涉及到的功能可通过pcl_viewer /path/.pcd打开图像,按键盘h(获取帮助)的方式获得.

程序中的可视化

简单可视化类

所谓简单可视化类,是指直接在程序中使用,而且不支持多线程。

必须包含的头文件 #include,声明一个可视化类直接 pcl::visualization::CloudViewer viewer ("test"); 即可,它的意思是说,我创建了一个CloudViewer的可视化类,这个可视化窗口的名字叫做test; 显示用viewer.showCloud(cloud) , 要想让自己所创窗口一直显示,则加上 while (!viewer.wasStopped()){ };即可, 或者直接 viewr.spin(0);

"复杂的"可视化类

以一段程序为例:

#include //包含基本可视化类

#include

//设置键盘交互函数,按下`space`键,某事发生

void keyboardEvent(const pcl::visualization::KeyboardEvent &event,void *nothing)

{

if(event.getKeySym() == "space" && event.keyDown())

next_iteration = true;

}

int main (int argc, char **argv)

{

1. 读入点云 source, target

2. 处理读入的数据文件

boost::shared_ptr<:visualization::pclvisualizer> view (new pcl::visualization::PCLVisualizer("test")); //创建可视化窗口,名字叫做`test`

view->setBackgroundColor(0.0,0,0); //设置背景色为黑色

viewer->addCoordinateSystem(1.0); //建立空间直角坐标系

// viewer->setCameraPosition(0,0,200); //设置坐标原点

viewer->initCameraParameters(); //初始化相机参数

***`*显示的”处理的数据文件“的具体内容*`***

view->registerKeyboardCallback(&keyboardEvent,(void*)NULL); //设置键盘回吊函数

while(!viewer->wasStopped())

{

viewer->spinOnce(100); //显示

boost::this_thread::sleep (boost::posix_time::microseconds (100000)); //随时间

}

}

在主程序2中,处理显示数据文件包含以下几种:

一. 计算并显示法向量,具体在自己的笔记pcl法向量的计算与显示

二. 我的笔记画线与显示,可用于配准计算中对应点对的显示,不过用画线的办法很不好.

三. 单纯的自定义的显示点云有如下常用函数:

pcl::visualization::PointCloudColorHandlerCustom<:pointxyz> sources_cloud_color(source,250,0,0); //这句话的意思是:对输入为pcl::PointXYZ类型的点云,着色为红色。其中,source表示真正处理的点云,sources_cloud_color表示处理结果.

view->addPointCloud(source,sources_cloud_color,"sources_cloud_v1",v1); //将点云source,处理结果sources_cloud_color,添加到视图中,其中,双引号中的sources_cloud_v1,表示该点云的”标签“,我们依然可以称之为”名字“,之所以设置各个处理点云的名字,是为了在后续处理中易于区分; v1表是添加到哪个视图窗口(pcl中可设置多窗口模式)

view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"sources_cloud_v1"); //设置点云属性. 其中PCL_VISUALIZER_POINT_SIZE表示设置点的大小为3,双引号中”sources_cloud_v1“,就是步骤2中所说的标签。

view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY,1,"sources_cloud_v1"); //主要用来设置标签点云的不透明度,表示对标签名字为"sources_cloud_v1"的标签点云设置不透明度为1,也就是说透明度为0. 默认情况下完全不透明。

四. 显示配准中的对应点对关系.

要想显示点对之间的对应关系, 首先必须计算出对应点对, pcl中对应点对的计算可通过pcl::registration::CorrespondenceEstimation<:pointt> correspond_est;计算,计算出对应点对后, source 和 target对应点的索引会存储在vector A或pcl::Correspondences A中.要想显示点对的对应关系,只需view->addCorrespondences<:pointxyz>(source,target,A,"correspond",v1); 其中,pcl::PointXYZ表示所添加对应点对的类型为PointXYZ类型的,参数中的前两个表示目标点云和源点云,A 存储从目标点云到源点云的对应点的索引,”correspond“依然是自定义的标签,v1表示添加到哪个窗口.

为了使得对应点更加个性化,我们可以对它进行一下”定制“:

view->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH,2,"correspond"); //设置对应点连线的粗细.PCL_VISUALIZER_LINE_WIDTH,表示线操作,线段的宽度为2(提醒一下自己: 线段的宽度最好不要超过自定义的点的大小),"correspond"表示对 对应的标签 做处理.

view->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,1,"correspond"); //设置对应点连线的颜色,范围从0-1之间。

五. 多窗口及人机交互设置.

具体操作即设置请看pcl之ICP实现

六. 如果用pcl的可视化类显示直方图,则可以这样做(以fpfh为例):

#include //直方图的可视化

#include

#include

int main (int argc, char **argv)

{

....

直方图计算

....

pcl::visualization::PCLHistogramVisualizer view;

view.setBackgroundColor(255,0,0);

view.addFeatureHistogram<:fpfhsignature33> (*fpfhs,"fpfh",1000); //对下标为1000的元素可视化

//view.spinOnce(10000); //循环的次数

view.spin(); //无限循环

return 0;

}

也可以这样显示直方图不过需要在添加头文件#include

pcl::visualization::PCLPlotter plotter;

// We need to set the size of the descriptor beforehand.

plotter.addFeatureHistogram(*fpfhs, 300); //设置的很坐标长度,该值越大,则显示的越细致

plotter.plot();

71d9a3c3ac4d29d5415d2f9b537ec0c3.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值