PCL点云

继之前的sfm,我们得到了图像的特征匹配点的三维坐标,颜色以及相机内参,如何将其显示在屏幕上呢?

需要使用PCL点云库进行显示。(安装)

PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

添加头文件:

#include

#include

#include

定义点云:

//-- pcl可视化 --//

PointCloud::Ptr cloud(new PointCloud);

//-- 实例化PCLVisualizer对象,窗口命名为3D viewer --//

boost::shared_ptr<:pclvisualizer> viewer(new visualization::PCLVisualizer("3D viewer"));

添加三维信息和颜色信息:

for (size_t i = 0; i < pts_3d.size(); i++)

{

//-- 定义带有三维坐标和颜色坐标的点 --//

//-- 读取三维点的坐标 --//

PointXYZRGB p;

p.x = pts_3d[i].x;

p.y = pts_3d[i].y;

p.z = pts_3d[i].z;

//-- 读取三维点的颜色 --//

//-- opencv默认通道是bgr --//

p.b = colors[i][0];

p.g = colors[i][1];

p.r = colors[i][2];

cloud->points.push_back(p);

}

在相机处添加坐标系:

由于有多个相机,需要在里面显示出相机的位姿,所以需要添加多个相机坐标系

Eigen::Matrix4f transformationMatrix;

//-- 仿射变换矩阵 --//

Eigen::Affine3f postion;

for (int i = 0; i

{

transformationMatrix <<

rotations[i].at(0, 0), rotations[i].at(0, 1), rotations[i].at(0, 2), transformations[i].at(0, 0),

rotations[i].at(1, 0), rotations[i].at(1, 1), rotations[i].at(1, 2), transformations[i].at(1, 0),

rotations[i].at(2, 0), rotations[i].at(2, 1), rotations[i].at(2, 2), transformations[i].at(2, 0),

0, 0, 0, 1;

postion.matrix() = transformationMatrix.inverse();

//-- 0.5是摄像机的尺寸,position是摄像机的位置 --//

viewer->addCoordinateSystem(0.5, postion);

}

添加点云:

viewer->addPointCloud(cloud, "sample cloud");

viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_OPACITY, 5, "sample cloud");// 设置点云显示属性,

显示点云:

一定要写这一句,否则无法显示点云!!!

//-- 不写while循环,则窗口一闪而过 --//

while (!viewer->wasStopped()) {

//-- 一定要写这一句来显示点云 --//

viewer->spinOnce(100);

}

完整代码:

// PCL可视化

PointCloud::Ptr cloud(new PointCloud);

//pcl::visualization::CloudViewer viewer ("test");

boost::shared_ptr<:pclvisualizer> viewer(new visualization::PCLVisualizer("3D viewer")); // 实例化PCLVisualizer对象,窗口命名为3D viewer

for (size_t i = 0; i < pts_3d.size(); i++)

{

PointXYZRGB p;

p.x = pts_3d[i].x;

p.y = pts_3d[i].y;

p.z = pts_3d[i].z / 10.0;

p.b = colors[i][0];

p.g = colors[i][1];

p.r = colors[i][2];

cloud->points.push_back(p);

}

viewer->setBackgroundColor(0, 0, 0); // 设置背景颜色

// 在相机处添加坐标系

Eigen::Matrix4f transformationMatrix;

Eigen::Affine3f postion;

for (int i = 0; i

{

transformationMatrix <<

rotations[i].at(0, 0), rotations[i].at(0, 1), rotations[i].at(0, 2), transformations[i].at(0, 0),

rotations[i].at(1, 0), rotations[i].at(1, 1), rotations[i].at(1, 2), transformations[i].at(1, 0),

rotations[i].at(2, 0), rotations[i].at(2, 1), rotations[i].at(2, 2), transformations[i].at(2, 0),

0, 0, 0, 1;

postion.matrix() = transformationMatrix.inverse();

viewer->addCoordinateSystem(0.5, postion);

}

viewer->addPointCloud(cloud, "sample cloud");

viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_OPACITY, 5, "sample cloud");// 设置点云显示属性,

while (!viewer->wasStopped()) {

viewer->spinOnce(100);

}

最终显示如图

sfm点云代码_PCL点云显示sfm数据相关推荐

  1. 运用京东云代码托管、云编译、云部署等产品进行蓝绿部署简单实践

    干货 | 运用京东云代码托管.云编译.云部署等产品进行蓝绿部署简单实践 前几天我们以一种较为传统的方式在京东云上简单实践了基于Jenkins+Docker+Git 的CI流程,主要利用一些开源技术来实 ...

  2. python英文词云代码_Python 词云 【中/英】小白简单入门教程

    1. 分析 构建词云需要具备: 原料即文章等内容 将内容进行分词 将分词后的内容利用构建词云的工具进行构建 保存成图片 2. 需要的主要模块 jieba 中文分词 wordcloud 构建词云 3. ...

  3. 【开源项目】QT OPENGL 与 shader 绘制展示视频代码实例 OPenGL直接显示YUV数据

    本文使用QT中的QOpenGLFunctions(此类封装了OPenGL的方法,相当于QT版OPenGL) 其次重载 void paintGL();   void initializeGL();  v ...

  4. 「轻松支付,只需几步」使用 LeanCloud 云代码接入支付宝示例

    如果你的应用想接入支付宝,让用户可以在应用内部直接支付,你可以看下这篇文档和开源项目,也许会给你带来一些帮助. 项目:https://github.com/leancloud/cloud-code-a ...

  5. 代码管理 阿里云 云效 设置云效 SSH 公钥 下载代码到本地配置SSH

    前言:能来这里看怎么解决的,肯定就是没人带没人疼娃了,人生就是这里碰壁哪里碰壁.这里学点哪里学点..然后就没得学了... 设置云效 SSH 公钥 >云效代码管理 Codeup>操作指南&g ...

  6. 〖3D激光点云〗激光雷达点云bin文件读取和显示!

    激光雷达点云bin文件读取和显示! 文章目录 一. 代码 二. 结果 三. 显示 四. 参考 首先声明文章主要参考:Ronny Restrepo!其中包括如下的内容. 点云数据的介绍 图像和点云坐标系 ...

  7. GEE|在GEE对Sentinel-2、Landsat7、Landsat8进行批量大气校正、去云,并进行均值融合、裁剪、显示和数据下载

    前言: 由于我要使用S2在2016-2020年时序数据进行作物分类,但GEE仅提供2018年后的S2 L2A数据('COPERNICUS/S2_SR'),因此需要进行大气校正,同时由于需要的数据量大, ...

  8. 零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)

    要想实现通过代码实现STM32连入阿里云服务器,要首先实现使用AT指令通过串口连接阿里云,大家可以参考我之前的两篇文章,链接如下 链接: 零基础STM32+ESP12F+MQTT连接阿里云服务器完整流 ...

  9. (15)腾讯云微搭:云开发为底层支撑的低代码应用/表单开发平台

    文章目录 一. 实验平台--腾讯云微搭 二. 项目功能与实现 1.3个数据模型 (1) 我的课程 (2) 任务清单 (3) 成绩单 2.2个通用选项集 (1) 星期 (2) 周数 3. 组件功能 (1 ...

  10. git提交代码到码云过程

    参考: https://blog.csdn.net/qq_39400546/article/details/100150320 https://blog.csdn.net/aiming66/artic ...

最新文章

  1. Spring-AOP的实现方法
  2. android开发启动画面,Android开发笔记——如何正确实现App启动页
  3. android ConcurrentHashMap的使用
  4. Apache/Tomcat/JBOSS/Nginx(2)
  5. LeetCode 题 - 66. 列表元素加一 python实现
  6. 323 id与小数据池
  7. SEAYAR - 思雅,快乐生活
  8. python初学者编程指南源码_适合新手的开源项目(Python 篇)
  9. RecyclerView学习(二)之缓存探索
  10. 网际风全推数据接口_网际风千钧版 飞狐配套全推接口最新版(2013年5月10更新)...
  11. 比特率与波特率的定义及区别
  12. Ubuntu傻瓜式录制GIF图—— Peek
  13. json_encode转义中文问题
  14. 20162327WJH程序设计与数据结构第七周总结
  15. 边界值分析法用例设计
  16. 【Unity】问题记录:Some objects were not cleaned up when closing the scene
  17. oracle的解除锁表
  18. 药品大数据公司都有哪些?
  19. html5一键导航代码,网页端利用百度地图接口,制作一键导航功能
  20. 谁的php最厉害,羽坛四大天王谁最强?羽毛球四大天王排行榜(图)

热门文章

  1. Scrum板与Kanban如何抉择?drzdbtbna板与按照exrefp
  2. Hive基础教程 Hive入门
  3. 计算机多媒体课件制作,多媒体课件制作软件
  4. 花了一年时间开发的铣床数控系统NCStudioPro(支持钻孔,铣削,切割等铣床加工工艺)...
  5. 【C 语言】文件操作 ( fseek 函数 )
  6. Oracle导入导出二进制文件,你不知道的事
  7. 校招| C++ 后台开发学习路线
  8. 七日年化收益率计算器_定投收益率该怎么算?
  9. [转]冰山一角 管窥中国互联网的地下世界
  10. 华硕xhci灰色_[安装实录] 零基础完美黑苹果安装之华硕篇