PCL三维重建教程-点云基础篇(认识、读取加载显示、输出保存点云、附赠点云类型转换)C++_第1页
PCL三维重建教程-点云基础篇(认识、读取加载显示、输出保存点云、附赠点云类型转换)C++_第2页
PCL三维重建教程-点云基础篇(认识、读取加载显示、输出保存点云、附赠点云类型转换)C++_第3页
PCL三维重建教程-点云基础篇(认识、读取加载显示、输出保存点云、附赠点云类型转换)C++_第4页
PCL三维重建教程-点云基础篇(认识、读取加载显示、输出保存点云、附赠点云类型转换)C++_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PCL三维重建教程_点云基础篇(认识、读取加载显⽰、输出保存点云、附赠点云类型转换)C++讲在前⾯:本教程类似于教会你加减乘除(点云基础、分割、滤波、配准),然后⾃⼰做⼀道包含加减乘除的综合题(实践操作)。此教程⽤最简单的例程,给⼤家直观感受。就像做⼀道物理⼤题,我们总⽤理想情况,便于理解学习。因此,所有的⽰例都围绕斯坦福的⼩兔⼦展开。我不会带你们看官⽅⽂档,⽽是⽤⾃⼰的想法和语⾔来表达,⽬的是让⼀头雾⽔的⼈会去应⽤。毕竟我知道,做这个的⼤多数⼈,也只是为了应⽤,如果去深究原理,必然也不会来到这⾥。很多东西,我们只会应⽤就会“⾼⼈⼀等”,原理重要吗?重要!但对于⼤多数⼈来说,没有必要。司机并不⼀定知道汽车内部是什么结构,怎样运⾏的,他只需要会开车。没错,所以我们只能是司机,但对于我们来说,⾜够了。在我看来学会了应⽤,才会去学习更深层次的东西。当你不知原因打印出⼀个"helloworld!",那种神秘和兴奋,会引导你去想弄清楚,这到底是为什么。先去吃个饭,⼀会再写:)前提准备:⾸先说明我的环境:win10+visualstudio2013+PCL1.8.0如果你使⽤其他版本,只要配置好了,也没有什么问题。如果你还没有配置好环境,请看以下⽂章。此外需要你有⼀定的c/c++,或是其他任意⼀门语⾔基础。真的只需要基础就可以,这⽅⾯课程也⽐较多,请先⾃⾏去学习。进⼊正题!⾸先,我们认识⼀下点云。点云,字⾯来看,是很多点组成的云?云是千变万化的,⼤量的点的千变万化也组成了不同的形状。现在跟我想,我们写txt⽂件的时候,可以把输⼊的⼀个字符看做⼀个基本单位。那在pcd⽂件中呢?就是⼀个点,但这个点不⼀般。它有位置和颜⾊。下⾯,我打开⼀个点云兔⼦pcd⽂件。读取加载显⽰点云:我怎么把这个点云可视化呢?⽰例⼀:#include<pcl/visualization/cloud_viewer.h>#include<iostream>//标准C++库中的输⼊输出类相关头⽂件。#include<pcl/io/io.h>#include<pcl/io/pcd_io.h>//pcd读写类相关的头⽂件。#include<pcl/io/ply_io.h>#include<pcl/point_types.h>//PCL中⽀持的点类型头⽂件。#include<pcl/visualization/pcl_visualizer.h>usingnamespacestd;usingnamespacepcl;usingnamespacevisualization;intmain(){//声明变量就像我们⽤整型a之前要inta;//类也是如此PointCloud<PointXYZ>::Ptrcloud(newPointCloud<PointXYZ>);PCDReaderreader;//加载pcd⽂件reader.read<PointXYZ>("{你的兔⼦路径}rabbit.pcd",*cloud);//如果要加载别的pcd⽂件只需修改这⾥!//创建显⽰窗⼝并命名为myviewerCloudViewerviewer("myviewer");//显⽰读取的点云viewer.showCloud(cloud);//阻⽌窗⼝关闭system("pause");return0;}⾸先我们要引⽤头⽂件,头⽂件中是别⼈写好的⼀些代码。因为我们不会写(造积⽊)!我们看似在敲代码,不过只是在⽤别⼈的积⽊,组建出不⼀样的东西罢了。使⽤命令空间,可以让代码看起来简洁。不使⽤的话main函数⾥第⼀句则为pcl::PointCloud<pcl::PointXYZ>::Ptrmy_cloud(newpcl::PointCloud<pcl::PointXYZ>);很长且眼花缭乱!效果如下:有两种⽅式,我们不要深究区别,不要忘了我们现在的⽬的,只是想看到点云⽽已。第⼆种:可以修改显⽰的点云颜⾊#include<iostream>#include<pcl/point_types.h>#include<pcl/io/pcd_io.h>#include<pcl/visualization/cloud_viewer.h>intmain(){//声明变量pcl::PointCloud<pcl::PointXYZ>::Ptrmy_cloud(newpcl::PointCloud<pcl::PointXYZ>);pcl::PCDReadermy_reader;//读取点云my_reader.read<pcl::PointXYZ>("E:\\Desktop\\code\\pointcloud\\rabbit.pcd",*my_cloud);//路径根据你⾃⼰的修改//显⽰结果图boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(newpcl::visualization::PCLVisualizer("view"));//设置背景颜⾊viewer->setBackgroundColor(0,255,0);//这⾥为绿⾊//设置点云颜⾊pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>color(my_cloud,255,0,255);//这⾥为紫⾊//加载显⽰的点云viewer->addPointCloud(my_cloud,color,"cloud");//可以设置最开始的视⾓//viewer->initCameraParameters();while(!viewer->wasStopped()){viewer->spinOnce(100);}return(0);}输出保存点云:#include<pcl/visualization/cloud_viewer.h>#include<iostream>//标准C++库中的输⼊输出类相关头⽂件。#include<pcl/io/io.h>#include<pcl/io/pcd_io.h>//pcd读写类相关的头⽂件。#include<pcl/io/ply_io.h>#include<pcl/point_types.h>//PCL中⽀持的点类型头⽂件。#include<pcl/visualization/pcl_visualizer.h>usingnamespacestd;usingnamespacepcl;usingnamespacevisualization;intmain(){//⽆颜⾊类型点云PointCloud<PointXYZ>::Ptrcloud(newPointCloud<PointXYZ>);//有颜⾊类型点云PointCloud<PointXYZRGB>::Ptrnew_cloud(newPointCloud<PointXYZRGB>);//读取加载pcd⽂件PCDReaderreader;reader.read<PointXYZ>("rabbit.pcd",*cloud);//获取原始点云数据数量intnum=cloud->points.size();cout<<"cloudsizeis:"<<num<<endl;//循环对每个点操作for(inti=0;i<num;i++){//定义⼀个XYZRGB类型点云P临时储存原始点云的坐标PointXYZRGBp;p.x=cloud->points[i].x;//cloud->point[i]即cloud点云中的第i个点p.y=cloud->points[i].y;//.x.y.z就是其坐标信息p.z=cloud->points[i].z;//给每个点赋值点云颜⾊p.r=0;p.g=255;p.b=255;//将同类型的P内的坐标和颜⾊信息赋值给新点云new_cloud->points.push_back(p);}visualization::CloudViewerviewer("myviewer");viewer.showCloud(new_cloud);pcl::io::savePCDFile("new_rabbit.pcd",*cloud);system("pause");return0;}由于保存太简单,⽆⾮多了以下代码。pcl::io::sav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论