点云转深度图:转化,保存,可视化
【摘要】
三维数据的获取方式 RGBD相机和深度图 代码展示:在pcl中,把点云转为深度图,并保存和可视化 三维数据的获取方式 在计算机视觉和遥感领域,点云可以通过四种主要的技术获得, (1)根据图像衍生而得,比如通过双目相机, (2)基于RGBD相机获取点云 (3)基于光探测距离和测距系统比如lidar, (4)Synthetic Aper...
三维数据的获取方式
RGBD相机和深度图
代码展示:在pcl中,把点云转为深度图,并保存和可视化
三维数据的获取方式
在计算机视觉和遥感领域,点云可以通过四种主要的技术获得,
(1)根据图像衍生而得,比如通过双目相机,
(2)基于RGBD相机获取点云
(3)基于光探测距离和测距系统比如lidar,
(4)Synthetic Aperture Radar (SAR)系统获取,基于这些不同的原理系统获取的点云数据,其数据的特征和应用的范围也是多种多样
RGBD相机和深度图
(1)深度图的原理:用深度值z值 当作像素值
(2)深度图获取原理:
代码展示:在pcl中,把点云转为深度图,并保存和可视化
-
#include <iostream>
-
#include <pcl/io/pcd_io.h>
-
#include <pcl/common/common_headers.h>
-
#include <pcl/range_image/range_image.h> //点云转深度头文件
-
#include <pcl/visualization/range_image_visualizer.h> //深度图像可视化
-
#include <pcl/visualization/pcl_visualizer.h>//点云可视化
-
#include <boost/thread/thread.hpp>//多线程
-
#include <pcl/io/png_io.h>//保存深度图像
-
#include <pcl/visualization/common/float_image_utils.h>//保存深度图像
-
int main(int argc, char** argv) {
-
pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud(new pcl::PointCloud<pcl::PointXYZ>);
-
pcl::io::loadPCDFile("D:/zmy_719/vs_pcl/bun0.pcd", *pointCloud);
-
-
//以1度为角分辨率,从上面创建的点云创建深度图像。
-
//深度图像中的一个像素对应的角度大小1°,角度转弧度
-
float angularResolution = (float)(1.0f * (M_PI / 180.0f));
-
-
// 360.0度转弧度,扫描的水平宽度是360°
-
float maxAngleWidth = (float)(360.0f * (M_PI / 180.0f));
-
-
// 180.0度转弧度,扫描的垂直高度是180°
-
float maxAngleHeight = (float)(180.0f * (M_PI / 180.0f));
-
-
//采集位置,传感器的初始位姿
-
Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
-
-
//选择的系统 X轴是向右,Y轴向下,Z轴向前
-
//如果选择是LASER_FRAME,则X轴向前,Y轴向左,Z轴向上
-
pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
-
-
//noiseLevel如果设置为0.05就是5cm为半径的圆内的所有点的平均值,得到的深度值为准
-
float noiseLevel = 0.00;
-
-
//minRange大于0,假设为r,那么r内的所有点被忽略,为盲区
-
float minRange = 0.0f;
-
int borderSize = 1;
-
-
//-------------------生成深度图像------------------------
-
pcl::RangeImage::Ptr rangeImage_ptr(new pcl::RangeImage);
-
pcl::RangeImage& rangeImage = *rangeImage_ptr;
-
rangeImage.createFromPointCloud(*pointCloud, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
-
//-------------------读取深度图像信息------------------------
-
std::cout << rangeImage << "\n";
-
-
//-------------------深度图的保存------------------------
-
float* ranges = rangeImage.getRangesArray();
-
unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges, rangeImage.width, rangeImage.height);
-
pcl::io::saveRgbPNGFile("RangeImage.png", rgb_image, rangeImage.width, rangeImage.height);
-
-
//------------------可视化点云----------------------
-
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer1(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
-
//设置背景颜色
-
viewer1->setBackgroundColor(0, 0, 0);
-
//添加点云
-
viewer1->addPointCloud(pointCloud, "point cloud");
-
viewer1->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 0, 1, "point cloud");
-
viewer1->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "point cloud");
-
-
//------------------可视化深度图像----------------------
-
//方法一:从点云中可视化深度图像
-
boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("RangeImage Viewer"));
-
viewer->setBackgroundColor(0, 0, 0); //设置背景颜色为黑色
-
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointWithRange> range_image_color_handler(rangeImage_ptr, "z");
-
viewer->addPointCloud(rangeImage_ptr, range_image_color_handler, "range image");
-
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5, "range image");
-
viewer->initCameraParameters();
-
-
//方法二:以图像的形式显示深度图像,深度值作为颜色显示
-
pcl::visualization::RangeImageVisualizer range_image_widget("Range image");
-
range_image_widget.setWindowTitle("RangeImage");
-
range_image_widget.showRangeImage(rangeImage);
-
range_image_widget.setSize(1000, 1000);
-
-
while (!viewer->wasStopped())
-
{
-
viewer->spinOnce(100);
-
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
-
}
-
-
system("pause");
-
return 0;
-
}
结果展示:
代码参考:PCL官网
原文链接:https://blog.csdn.net/adfjadsklf/article/details/119082844
文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/125396255
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)