目标:

  • 输入RGB图像 + Depth深度图像,输出单幅图像的点云模型pointcloud.pcd

Main.cpp

// C++ 标准库
#include <iostream>
#include <string>
using namespace std;// OpenCV 库
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>// PCL 库
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>// 定义点云类型
typedef pcl::PointXYZRGBA PointT;
typedef pcl::PointCloud<PointT> PointCloud; // 相机内参
const double camera_factor = 1000;
const double camera_cx = 325.5;
const double camera_cy = 253.5;
const double camera_fx = 518.0;
const double camera_fy = 519.0;// 主函数
int main( int argc, char** argv )
{// 读取./data/rgb.png和./data/depth.png,并转化为点云// 图像矩阵cv::Mat rgb, depth;// 使用cv::imread()来读取图像// API: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#cv2.imreadrgb = cv::imread( "./data/rgb.png" );// rgb 图像是8UC3的彩色图像// depth 是16UC1的单通道图像,注意flags设置-1,表示读取原始数据不做任何修改depth = cv::imread( "./data/depth.png", -1 );// 点云变量// 使用智能指针,创建一个空点云。这种指针用完会自动释放。PointCloud::Ptr cloud ( new PointCloud );// 遍历深度图for (int m = 0; m < depth.rows; m++)for (int n=0; n < depth.cols; n++){// 获取深度图中(m,n)处的值ushort d = depth.ptr<ushort>(m)[n];// d 可能没有值,若如此,跳过此点if (d == 0)continue;// d 存在值,则向点云增加一个点PointT p;// 计算这个点的空间坐标p.z = double(d) / camera_factor;p.x = (n - camera_cx) * p.z / camera_fx;p.y = (m - camera_cy) * p.z / camera_fy;// 从rgb图像中获取它的颜色// rgb是三通道的BGR格式图,所以按下面的顺序获取颜色p.b = rgb.ptr<uchar>(m)[n*3];p.g = rgb.ptr<uchar>(m)[n*3+1];p.r = rgb.ptr<uchar>(m)[n*3+2];// 把p加入到点云中cloud->points.push_back( p );}// 设置并保存点云cloud->height = 1;cloud->width = cloud->points.size();cout<<"point cloud size = "<<cloud->points.size()<<endl;cloud->is_dense = false;pcl::io::savePCDFile( "./pointcloud.pcd", *cloud );// 清除数据并退出cloud->points.clear();cout<<"Point cloud saved."<<endl;return 0;
}

CMakelist.txt

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
PROJECT( slam )SET(CMAKE_CXX_COMPILER "g++")
SET( CMAKE_BUILD_TYPE Debug  )
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include )
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src )

参考:一起做RGB-D SLAM (2)

单幅RGB图像+Depth深度图得到点云模型示例相关推荐

  1. FusionNet:基于稀疏雷达点云和RGB图像的深度图补全

    作者:Tom Hardy Date:2020-02-09 来源:FusionNet:基于稀疏雷达点云和RGB图像的深度图补全

  2. docker 训练深度学习_利用RGB图像训练MultiModality的深度学习模型进行图像分割

    ▼更多精彩推荐,请关注我们▼ Dragonfly软件的一个特色功能就是可以让用户自己方便快速地训练深度学习的模型,实现图像分割等工作的智能完成.关于Dragonfly里面深度学习工具和智能分割向导工具 ...

  3. 《PlaneNet-单幅RGB图像的分段平面重建》论文中英文对照解读

    论文地址:https://arxiv.org/pdf/1804.06278.pdf 代码地址:https://github.com/art-programmer/PlaneNet PlaneNet: ...

  4. 读后感与机翻《整体的三维场景解析和重建从单一的RGB图像》

    以下是研究朱松纯FPICU概念中F(functionality)的第一篇论文记录: 读后感: 文章做了什么事? 提出一种3D室内场景解析和重建的算法,可以从单个RGB图像同时重建出室内场景的功能层次和 ...

  5. CAD模型转为点云模型/三维点云转为灰度图

    一.三维模型转变为点云模型 (1)导入三维模型 首先准备好三维模型文件,笔者所使用的为.stl文件.在工具栏中找到File–>Open,选择三维模型文件点击打开,即可在CC中看到带转换的三维模型 ...

  6. 三维模型转变为点云模型的好工具——CloudCompare使用小记

    普通三维模型能够直观地展示物体的三维全貌,但是在一些场合需要将三维模型变为相应的点云模型进行展示,而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况,或是使用PCL库中的可执行文件进行转 ...

  7. 第二讲 从图像到点云 笔记

    本讲中,我们将带领读者,编写一个将3D图像转换为3D点云的程序.该程序是后期处理地图的基础.最简单的点云地图即是把不同位置的点云进行拼接得到的. 当我们使用RGB-D相机时,会从相机里读到两种数据:彩 ...

  8. Realsense相机在linux下的配置使用,RGB与depth图像对齐

    目录 非ROS版本 配置 使用 注意: ROS版本 非ROS版本 配置 要在linux下使用realsense相机,需要首先配置librealsense.我的环境是Ubuntu18.04,相机是D43 ...

  9. 成功检测远距离目标,将点云与RGB图像结合,谷歌Waymo提出新算法:4D-Net

    本文选自Google Blog,作者:AJ Piergiovanni 等 转自机器之心 编辑:陈萍.杜伟 来自谷歌的研究者提出了一种利用 3D 点云和 RGB 感知信息的 3D 物体检测方法:4D-N ...

  10. 自己融合RGB和Depth图像

    如何有效的融合融合RGB和Depth图像? 可以通过对两个通道进行卷积,然后融合,但是效果可能不太好,现在大部分都是通过注意力融合,之前自己想通过ASPP进行融合,因为ASPP可以捕捉上下文信息,但是 ...

最新文章

  1. android5.0 广播失效,解决Android 8.0及以上系统接收不到广播的问题
  2. gentoo下gnome的抓图功能
  3. 数制系统之间的转换总结(各进制的转换)
  4. 上传问题分析--目录分离
  5. LiveVideoStackCon深圳-精选最新多媒体技术方案
  6. 16年微软/腾讯云/华为云MVP是怎样炼成的
  7. copyof java_JDK10——copyOf方法
  8. canvas笔记-使用canvas画圆及点阵的使用
  9. 【译】响应式CSS动画
  10. C#鼠标点击器-没有测试-转自http://hi.baidu.com/syq_ghost/item/2cc253eb538b72e7fb42ba44
  11. Jabber 创建一个application dial rule
  12. android 邮件发送html,如何发送HTML电子邮件
  13. vfpodbc.dll下载, 各版本下载,包含所有版本
  14. 2008年全国计算机软考程序员考试大纲
  15. Word太大怎么进行压缩?实用Word压缩工具
  16. 【基操】word插入的表格无法修改列宽
  17. Rime输入法小狼毫皮肤配色
  18. 转载: 房贷的两种还款方式介绍
  19. About 10.30 This Week
  20. 2021年制冷与空调设备运行操作新版试题及制冷与空调设备运行操作模拟试题

热门文章

  1. 【BZOJ 3652】大新闻 数位dp+期望概率dp
  2. MySQL · 引擎特性 · 基于InnoDB的物理复制实现(转载)
  3. PHP Mysql-简介
  4. java线程池ThreadPoolExecutor使用简介
  5. Assembly初识
  6. 已有一个名为“frmadd”的组件。组件的名称必须是唯一的,而且名称必须不区分大小
  7. vue 中使用echart5.2发生TypeError: Cannot read properties of undefined (reading ‘init‘)
  8. Java基础反射---并没那么难系列【三】
  9. SVN使用过程中出现“工作副本已经锁定”的解决办法
  10. 2个div并排自适应宽度