![](https://img-blog.csdnimg.cn/20210519150636222.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PCL点云处理
文章平均质量分 83
点云处理库PCL学习经验总结,官方教程翻译
SOC罗三炮
嵌入式软件开发,ARM CPU架构研究,某厂芯片SOC系统验证工程师
展开
-
点云处理及三维重建软件(Point Cloud Viewer, PCV)的环境搭建详细教程
最近有同学在搭建PCV环境时遇到了一些问题来向我求助,确实这个工程涉及面比较广:PCL+QT+CPP+VS+CMAKE,所以一些没接触过相关工具的同学一时不知从何入手,特此把环境搭建教程再详细化,祝同学们都能跑通PCV。评论区里已经有同学跑通了该项目,作为一个开源爱好者,这一点足以让人欣慰。另外,本项目早已在[Github](https://github.com/luolaihua)开源,目的是为了让同学们少走弯路,毕竟国内相关免费软件和教程少之又少。既然是**开源**,所以是**免费**的,遇到技术问题可原创 2023-10-24 13:18:38 · 4396 阅读 · 8 评论 -
开源,点云处理及三维重建软件(Point Cloud Viewer, PCV)的设计与实现
本文所设计的点云处理及三维重建软件主要基于Microsoft Visual Studio 2017以及Qt Creator两个集成开发环境,来完成代码的编写、分析、编译以及调试工作。此外,本文主要基于Qt框架来完成软件界面的设计以及内部逻辑功能的实现,Qt具有一套代码,多平台运行的特点,因此使用此框架开发的软件不仅能够在Windows和Linux等操作系统上运行,还能在MacOS上运行。也正是因为Qt的跨平台开发的特性,也使得本章所设计的软件可以在多个操作系统中正常运行。原创 2023-04-22 18:39:10 · 20153 阅读 · 57 评论 -
PCL点云库可视化常用函数与经验总结
makeShared:使点云返回一个智能指针(深拷贝) /** \brief Copy the cloud to the heap and return a smart pointer * Note that deep copy is performed, so avoid using this function on non-empty clouds. * The changes of the returned cloud are not mirrored.原创 2022-09-06 23:27:55 · 6203 阅读 · 0 评论 -
VS加载Qt项目出现“不允许使用不完整的类型”问题
最近做项目使用Qt+Cmake+VS:使用Cmake编译Qt项目,然后在VS中开发。项目结构如图:使用Cmake编译后,打开项目,出现了如下图的问题:原因很简单,VS没有找到ui的头文件:#include "ui_mainwindow.h"可以在VS中发现,出现了四个同名的ui_mainwindow.h文件:但是其中只有一个能被打开,其他的双击打开会报错:将报错的文件移除即可解决问题:...原创 2021-10-31 21:37:26 · 8950 阅读 · 8 评论 -
pcl::visualization::PCLVisualizer添加文字显示注意事项
注意PCLVisualizer的addText()方法不支持中文显示。viewer.addText("不支持中文显示", 20, 60, "text");最简单的用法,只设置文字显示的位置:pcl::visualization::PCLVisualizer viewer("点云显示");viewer.addText("cloud", 20, 60, "text");复杂一点的用法,可以设置字体颜色和大小:bool addText (const std::st原创 2021-10-29 21:39:41 · 2705 阅读 · 1 评论 -
PCL教程-点云表面重建之使用移动最小二乘法(MLS)
/** \brief MovingLeastSquares represent an implementation of the MLS (Moving Least Squares) algorithm * for data smoothing and improved normal estimation. It also contains methods for upsampling the * resulting cloud based on the parametric fit....翻译 2021-09-27 11:34:30 · 6453 阅读 · 10 评论 -
PCL教程-点云配准之正态分布变换算法(NDT)
原文链接:How to use Normal Distributions Transform在本篇教程中,我们将学习使用正态分布变换算法(Normal Distributions Transform ,NDT)来确定两个超大点云(都超过100000点)之间的刚性变换。NDT算法是一种配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快,更多关于正态分布变换算法的详细的信息,请看 Martin Magn..翻译 2021-09-23 10:34:53 · 4988 阅读 · 7 评论 -
PCL教程-点云配准之成对逐步配准(两两配准)
/* \author Radu Bogdan Rusu * adaptation Raphael Favier*/#include <boost/make_shared.hpp>//boost指针#include <pcl/point_types.h>//点类型定义#include <pcl/point_cloud.h>//点云类#include <pcl/point_representation.h>//点表示#include <pcl/.翻译 2021-09-22 14:16:10 · 5720 阅读 · 39 评论 -
PCL学习总结-点云显示之颜色控制以及设置背景颜色注意事项
在使用PCLVisualizer进行点云显示的过程中,经常需要给点云上色,以区分不同类型的点云,经常用到的上色方法有:1. 显示点云自带的颜色信息;2. 根据点云的某个属性(字段)进行上色(例如:X,Y,Z等方向上不同颜色);3. 自定义单一颜色(给某个点云显示同一个颜色);4. 随机上色(由编译器随机给点云分配单一颜色);显示点云自带的颜色信息(PointCloudColorHandlerRGBField)boost::shared_ptr<pcl::visualizatio原创 2021-09-21 14:19:10 · 11666 阅读 · 2 评论 -
PCL教程-点云配准之ICP算法的使用
原文链接:How to use iterative closest point在本篇教程中,将在代码中使用迭代最近点(Iterative Closest Point ,ICP)算法,通过最小化两个点云之间的距离并严格转换它们,可以确定一个点云是否只是另一个点云的严格转换。这里的转换是平移+旋转的空间转换。程序代码#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h..翻译 2021-09-20 21:36:45 · 2478 阅读 · 0 评论 -
PCL教程-点云滤波之投影滤波
原文链接:Projecting points using a parametric model本小节将学习如何将点投影到一个参数化模型上(例如平面或球等)。参数化模型通过一组参数来设定,对于平面来说使用其等式形式ax+by十cz+d=0,在PCI中有专门存储常见模型系数的数据结构。程序代码#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include &翻译 2021-09-11 16:29:52 · 1645 阅读 · 0 评论 -
PCL教程-点云滤波之StatisticalOutlierRemoval滤波器
原文链接:Removing outliers using a StatisticalOutlierRemoval filterhttps://pcl.readthedocs.io/projects/tutorials/en/latest/statistical_outlier.html#statistical-outlier-removal点云数据:table_scene_lms400.pcdhttps://raw.github.com/PointCloudLibrary/data/master/t...翻译 2021-09-11 14:01:47 · 4328 阅读 · 0 评论 -
PCL教程-点云滤波之体素滤波器(下采样)
原文链接:Downsampling a PointCloud using a VoxelGrid filter点云文件下载:table_scene_lms400.pcd在本篇教程中,我们将使用体素化的方式对点云数据进行下采样。原理下采样:减少点云数据集中点云数量体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。 此外体素滤波器可以去除一定程度的噪音点及离群点。主要功能是用来进行降采样。它的原理是根据输入的点云,首先计算一个能够刚好包裹住该点云的立..翻译 2021-09-10 16:11:39 · 15063 阅读 · 1 评论 -
PCL教程-点云滤波之直通滤波器
算法原理直通滤波的作用是过滤掉在指定维度方向上取值不在给定值域内的点。实现原理如下:首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。直通滤波器简单高效,适用于消除背景等操作。PCL中的pcl:PassThrough类实现对用户给定点云某个字段的限定下,对点云进行简单的基本过滤,例如限制过滤掉点云中所有Z字段不在某个范围内的点,该类的使用比较灵活但完全取决于用户的限定原创 2021-09-10 10:44:56 · 6763 阅读 · 10 评论 -
点云处理之点云滤波去噪
目录点云滤波简介什么是点云滤波?为什么要点云滤波?常用滤波器直通滤波器体素滤波器(下采样)均匀采样滤波器(下采样)统计滤波器(去噪)条件滤波半径滤波(去噪)投影滤波模型滤波高斯滤波(去噪、平滑)双边滤波(平滑)总结点云滤波简介什么是点云滤波?点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等为什么要点云滤原创 2021-09-09 22:41:01 · 25329 阅读 · 4 评论 -
PCL教程-点云分割之区域生长分割算法
Inputs:Point cloud=Point normals=Points curvatures=Neighbour finding functionCurvature thresholdAngle thresholdInitialize:Region listAvailable points listAlgorithm:Whileis not emptydoCurrent re...翻译 2021-09-09 14:03:07 · 14227 阅读 · 14 评论 -
PCL教程-点云分割之欧式聚类分割
原文链接:Euclidean Cluster Extraction在本篇教程中,我们将学习使用pcl::EuclideanClusterExtraction类提取欧几里德聚类。为了使本篇教程更加精简,之前教程中提到的知识点将不再重复说明,比如平面模型分割,可参考之前的博文:PCL教程-点云分割之平面模型分割数据集下载链接:table_scene_lms400.pcd理论基础聚类方法,通过特征空间确定点与点之间的亲疏程度。一个聚类方法需要将一个无序的点云模型P分割成更小的部分,...翻译 2021-09-09 10:06:39 · 15058 阅读 · 13 评论 -
PCL教程-点云分割之圆柱体分割
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/cylinder_segmentation.html#cylinder-segmentation翻译 2021-09-08 11:03:05 · 10316 阅读 · 2 评论 -
PCL教程-点云分割之平面模型分割
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/planar_segmentation.html#planar-segmentation基于RANSAC的基本检测算法虽然具有较高的鲁棒性和效率,但是目前仅针对平面,球,圆柱体,圆锥和圆环物种基本的基元。在本次教程中,我们将学习对一组点云做简单的平面分割,也就是在点云中找到组成平面模型的所有点。...翻译 2021-09-07 10:41:28 · 6928 阅读 · 7 评论 -
点云分割和点云分类(点云语义分割)
概念点云分割(point cloud segmentation)根据空间、几何和纹理等特征点进行划分,同一划分内的点云拥有相似的特征。点云分割的目的是分块,从而便于单独处理。点云分类(point cloud classification)为每个点分配一个语义标记。点云的分类是将点云分类到不同的点云集。同一个点云集具有相似或相同的属性,例如地面、树木、人等。也叫做点云语义分割。特征提取单个点或一组点可以根据低级属性检测某种类型的点。“低级属性”是指没有语义(例如,位置,高.原创 2021-09-05 16:29:49 · 55380 阅读 · 12 评论 -
PCL教程-几种常见采样方法
下采样一般下采样是通过构造一个三维体素栅格,然后在每个体素内用体素内的所有点的重心近似显示体素中的其他点,这样体素内所有点就用一个重心点来表示,进行下采样的来达到滤波的效果,这样就大大的减少了数据量,特别是在配准,曲面重建等工作之前作为预处理,可以很好的提高程序的运行速度均匀采样这个类基本上是相同的,但它输出的点云索引是选择的关键点在计算描述子的常见方式。增采样增采样是一种表面重建方法,当你有比你想象的要少的点云数据时,增采样可以帮你恢复原有的表面(S),通过内插你目前拥有的点云数据,这是一原创 2021-08-21 17:44:55 · 2822 阅读 · 0 评论 -
激光点云常用数据集整理
Princeton ModelNet (CAD文件)Princeton ModelNet项目的目标是为计算机视觉,计算机图形,机器人和认知科学提供研究人员,具有全面的3D CAD模型的对象。https://modelnet.cs.princeton.edu/Princeton Shape该数据集包含从万维网收集的3D多边形模型数据库。 对于每个3D模型,具有模型的多边形几何体的对象文件格式(.off)文件,模型信息文件(例如,从它来的位置),以及带有缩略图视图的JPEG图像文件 模型。原创 2021-08-08 16:13:17 · 3875 阅读 · 0 评论 -
使用CMake+Visual Studio编译生成的项目出现无法启动程序的问题解决办法
PCL的项目编译生成使用CMake配合VS使用是目前最便捷的方法。一般步骤如下:编写CMakeLists.txt和cpp文件 使用Cmake进行项目生成 使用VS打开项目使用VS打开CMake生成的sln文件后,可以看到三个项目:中间的pcl_visualizer_demo是我的工程文件,另外两个是CMake附带生成的,点击运行,会报错:出现这个问题其实解决办法很简单:因为当前默认的启动项目是ALL_BUILD这个项目,而不是自己的,所以只要将pc...原创 2021-07-18 21:30:28 · 8885 阅读 · 5 评论 -
PCL教程-PCLPlotter图表可视化类
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/pcl_plotter.html#pcl-plotterPCLPlotter类PCLPlotter类提供了非常直接简单的接口用于绘制图表。它内置了所有种类图表的工具库:从多项式函数到直方图,而不用另外的软件(如Matlab)。下面的代码片段简单是展示了PCLPlotter类的使用:#include<vector>#include<iostrea..翻译 2021-06-29 23:03:26 · 2604 阅读 · 3 评论 -
PCL教程-PCLVisualizer可视化类的使用
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/pcl_visualizer.html#pcl-visualizer翻译 2021-06-09 21:53:19 · 8720 阅读 · 4 评论 -
【吐槽】——《点云库PCL从入门到精通》一书
槽点一:生搬硬套,照抄官方教程这本书的大部分示例代码都是照抄官方教程:https://pcl.readthedocs.io/projects/tutorials/en/latest/随便摘抄一段原文:链接【https://pcl.readthedocs.io/projects/tutorials/en/latest/kdtree_search.html#kdtree-search】A k-d tree, or k-dimensional tree, is a data structure原创 2021-06-01 13:34:27 · 5603 阅读 · 8 评论 -
PCL教程-可视化深度(距离)图像(range image)
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/range_image_visualization.html#range-image-visualization翻译 2021-05-31 16:46:25 · 7658 阅读 · 10 评论 -
PCL使用pcl_sleep函数出现错误提示:未定义标识符“sleep”问题详解
如图:在使用原创 2021-05-31 11:20:15 · 3193 阅读 · 1 评论 -
PCL教程-使用CloudViewer类实现简单点云可视化
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/cloud_viewer.html#id1CloudViewer类CloudViewer类是一个简单直接,对简单点云进行可视化的类,仅用少量的代码就可实现点云的可视化。注意:CloudViewer类不能用于多线程应用当中。如果要在多线程中使用可视化,可以使用PCLVisualizer简单点云的可视化如果想在项目中用几行代码可视化点云,可以使用下面的模板...翻译 2021-05-27 20:27:14 · 4472 阅读 · 0 评论 -
PCL使用教程-使用八叉树(Octrees)进行空间分割和搜索操作
原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/octree.html#octree-search使用八叉树进行空间划分和搜索操作八叉树是用于管理稀疏3-D数据的基于树的数据结构。 每个内部节点都有八个子节点。 在本教程中,我们将学习如何使用八叉树在点云数据中进行空间分区和邻域搜索。 特别地,我们说明如何执行“体素内近邻搜索(Neighbors within Voxel Search)”,“ K最近邻搜索(K Neares.翻译 2021-05-25 13:34:44 · 3304 阅读 · 0 评论 -
PCL使用教程-使用k-d树(k-d tree)进行查找
如何使用k-d树进行查找在这篇教程中,我们将学习如何使用k-d树来搜索某个特殊点或者区域的K最近邻域。然后我们也将学习如何在用户指定的一些半径内找到所有的邻居(在本案例中是随机生成的)。k-d树理论基础k-d树,又称k维树,是计算机科学中用来组织表示k维空间中点集合的一种数据结构。它的本质是一棵带有其他约束的二叉查找树。k-d树对于区间搜索和最近邻搜索十分有用。由于我们处理的点云都是三维的,所以我们使用三维的k-d树。k-d树的每个级别使用垂直于相应轴的超平面将所有子级沿特定维度拆分。 在树的.翻译 2021-05-24 14:58:19 · 4888 阅读 · 0 评论 -
PCL点云库出现错误:..\dist.h(523): error C3861: “pop_t”: 找不到标识符
工程代码:简单地测试了k-d树的最近邻搜索功能#include<pcl/point_cloud.h>#include<pcl/kdtree/kdtree_flann.h>#include<iostream>#include<vector>#include<ctime>using namespace std;intmain(int argc, char** argv){ //使用系统时间做随机数种子 srand(ti.原创 2021-05-24 14:15:51 · 2765 阅读 · 3 评论 -
使用PCL对PCD文件进行简单读、写和拼接(数据拼接和字段拼接)操作
创建一个PCD文件:#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>intmain(int argc, char** argv){ //创建一个PointXYZ类型的点云对象 pcl::PointCloud<pcl::PointXYZ> cloud; // Fill in the cloud data cloud.width = 5;/原创 2021-05-20 16:35:26 · 1793 阅读 · 0 评论 -
CMake中CMakeLists文件的编写以及变量打印
最近在学习PCL,在Win10下使用VS编写PCL程序,配置环境时经常出错,踩坑记录详见:Win10+VS2017+PCL_1.8.1软件安装踩坑记录看到《点云库PCL从入门到精通》书中使用的都是cmke,发现使用cmake更加简洁快速,不易出错,测试记录:Win10下使用Cmake编译PCL工程文件测试使用cmake,最关键的一步就是编写CMakeLists文件。遂把PCL中常用的命令记录。CMakeLists.txt文件示例:cmake_minimum_required(VERSI原创 2021-05-19 10:34:36 · 12410 阅读 · 5 评论 -
PCL中PCD(Point Cloud Data)文件格式解析
PCD文件格式虽然已有很多3D点云数据的文件类型,但现有的文件结构因本身组成的原因不支持PCL库引进的n维点类型机制处理过程中的某些扩展。所以PCL官方选择了PCD文件格式。其他点云格式:PLY:一种多边形文件格式 STL:建模文件格式,主要应用于CAD、CAM领域 OBJ:从几何学上定义的文件格式 X3D:是符合ISO标准的基于XML的文件格式,用于表示3D计算机图形数据PCD版本在点云库(PCL)1.0发布之前,PCD文件格式有不同的修订号,PCL中正式发布的PCD文件格.原创 2021-05-18 14:06:54 · 5897 阅读 · 1 评论 -
Win10下使用Cmake编译PCL工程文件测试
工作环境:Windows 10 + Cmake 3.19.2 + VS2017 + PCL1.8.1PCL1.8.1下载链接注意:建议将pcl和附带安装的openni安装在默认路径,即C盘中,笔者改变了安装路径,导致后续Cmake编译时找不到相关文件路径,增添了不少麻烦如果需要安装到非C盘,则后面Cmake配置时需要自行设置各个第三方库的头文件和链接库路径,因为PCL中的CMake相关搜索路径默认只会在C盘中搜索相关的库。将pcl安装好之后,解压pcl-1.8.1-pdb...原创 2021-05-17 11:16:03 · 7975 阅读 · 1 评论 -
Win10+VS2017+PCL_1.8.1软件安装踩坑记录:error C4996: ‘std::fpos<_Mbstatet>::seekpos‘: warning STL4019
https://blog.csdn.net/qq_34784753/article/details/77484414https://www.pianshen.com/article/54944489/https://blog.csdn.net/qq_34782535/article/details/89469429errorC4996:'std::fpos<_Mbstatet>::seekpos':warningSTL4019在C/C++—>预处理器—>预处...原创 2021-02-15 15:08:39 · 5843 阅读 · 2 评论