点云学习笔记15——PCL常用的基础代码
点云学习笔记15——PCL基础
- 命名规范
- 常用代码
- 1、时间计算
- 2、pcl::PointCloud::Ptr和pcl::PointCloud的两个类相互转换
- 3、如何查找点云的x,y,z的极值?
- 4、知道需要保存点的索引,从原点云中拷贝点到新点云
- 5、如何从点云里删除和添加点
- 6、 链接两个点云字段(两点云大小必须相同)
- 7、如何从点云中删除无效点
- 8、计算质心
- 9、从网格提取顶点(将网格转化为点)
- 10、获取点云点数
- 资料汇总
主要参考《点云库PCL学习教程—朱德海》以及github上发现了一个人总结的书中的笔记
命名规范
源文件.cpp 结尾
命名空间命名:命名空间多余一个单词的应该用下划线连接
namespace pcl_io
{...
}
常用代码
1、时间计算
pcl中计算程序运行时间有很多函数,其中利用控制台的时间计算是:
#include <pcl/console/time.h>pcl::console::TicToc time; time.tic(); //+程序段 + cout<<time.toc()/1000<<"s"<<endl;
就可以以秒输出“程序段”的运行时间。
2、pcl::PointCloud::Ptr和pcl::PointCloud的两个类相互转换
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPointer(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ> cloud;
cloud = *cloudPointer;
cloudPointer = cloud.makeShared();
3、如何查找点云的x,y,z的极值?
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/common.h>
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
cloud = pcl::PointCloud<pcl::PointXYZ>::Ptr (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ> ("your_pcd_file.pcd", *cloud);
pcl::PointXYZ minPt, maxPt;
pcl::getMinMax3D (*cloud, minPt, maxPt);
4、知道需要保存点的索引,从原点云中拷贝点到新点云
#include <pcl/io/pcd_io.h>
#include <pcl/common/impl/io.hpp>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("C:\office3-after21111.pcd", *cloud);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudOut(new pcl::PointCloud<pcl::PointXYZ>);
std::vector<int > indexs = { 1, 2, 5 };
pcl::copyPointCloud(*cloud, indexs, *cloudOut);
5、如何从点云里删除和添加点
#include <pcl/io/pcd_io.h>
#include <pcl/common/impl/io.hpp>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("C:\office3-after21111.pcd", *cloud);
pcl::PointCloud<pcl::PointXYZ>::iterator index = cloud->begin();cloud->erase(index);//删除第一个index = cloud->begin() + 5;
cloud->erase(cloud->begin());//删除第5个pcl::PointXYZ point = { 1, 1, 1 };
//在索引号为5的位置1上插入一点,原来的点后移一位
cloud->insert(cloud->begin() + 5, point);cloud->push_back(point);//从点云最后面插入一点std::cout << cloud->points[5].x;//输出1
6、 链接两个点云字段(两点云大小必须相同)
#include <pcl/io/pcd_io.h>
#include <pcl/common/impl/io.hpp>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("/home/yxg/pcl/pcd/mid.pcd",*cloud);
pcl::NormalEstimation<pcl::PointXYZ,pcl::Normal> ne;
ne.setInputCloud(cloud);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>());
ne.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>());
ne.setKSearch(8);//ne.setRadisuSearch(0.3);
ne.compute(*cloud_normals);
pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_nomal (new pcl::PointCloud<pcl::PointNormal>);
pcl::concatenateFields(*cloud,*cloud_normals,*cloud_with_nomal);
7、如何从点云中删除无效点
pcl中的无效点是指:点的某一坐标值为nan.
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/filter.h>
#include <pcl/io/pcd_io.h>using namespace std;
typedef pcl::PointXYZRGBA point;
typedef pcl::PointCloud<point> CloudType;int main (int argc,char **argv)
{CloudType::Ptr cloud (new CloudType);CloudType::Ptr output (new CloudType);pcl::io::loadPCDFile(argv[1],*cloud);cout<<"size is:"<<cloud->size()<<endl;vector<int> indices;pcl::removeNaNFromPointCloud(*cloud,*output,indices);cout<<"output size:"<<output->size()<<endl;pcl::io::savePCDFile("out.pcd",*output);return 0;
}
8、计算质心
Eigen::Vector4f centroid; //质心
pcl::compute3DCentroid(*cloud_smoothed,centroid); //估计质心的坐标
9、从网格提取顶点(将网格转化为点)
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
#include <pcl/io/vtk_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>using namespace pcl;
int main(int argc,char **argv)
{pcl::PolygonMesh mesh;// pcl::io::loadPolygonFileOBJ(argv[1], mesh);pcl::io::loadPLYFile(argv[1],mesh);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::fromPCLPointCloud2(mesh.cloud, *cloud);pcl::io::savePCDFileASCII("result.pcd", *cloud);return 0;
}
以上代码可以从.obj或.ply面片格式转化为点云类型。
10、获取点云点数
// 输出点云大小 cloud->width * cloud->height
std::cout << "点云大小:" << cloud->size() << std::endl;
资料汇总
1、https://zhuanlan.zhihu.com/p/268524083
2、github上发现了一个人总结的书中的笔记
点云学习笔记15——PCL常用的基础代码相关推荐
- Spring.NET学习笔记15——AOP的配置(基础篇) Level 200
上篇我学习了Spring.NET的四种通知类型,AOP的实现方案比较复杂,是通过代码实现的.而Spring.NET框架给我们提供了配置的方式来实现AOP的功能.到目前为止,我们已经讨论过使用Proxy ...
- 点云学习笔记7——python pcl将点云数据转换成俯视图(鸟瞰图)
点云学习笔记7--python pcl将点云数据转换成俯视图(鸟瞰图) 环境安装 点云数据 代码 效果图 参考 环境安装 可以参考我另外一篇文章: 点云学习笔记3--点云库(PCL)安装与测试教程 点 ...
- amazeui学习笔记--css(常用组件5)--评论列表Comment
amazeui学习笔记--css(常用组件5)--评论列表Comment 一.总结 1.am-comment:使用am-comment来声明评论对象,这个是放在article里面的,虽然article ...
- amazeui学习笔记--css(常用组件6)--图标Icon
amazeui学习笔记--css(常用组件6)--图标Icon 一.总结 1.关注用法即可:在 HTML 上添加添加 am-icon-{图标名称} class. <span class=&quo ...
- Linux学习笔记:Linux常用命令总结
文章目录 前言 Linux学习笔记:Linux常用命令总结 1. 目录命令 1.1 Linux目录结构 1.2 cd命令 切换工作目录 1.3 ls命令 显示目录下文件 1.4 mkdir命令 创建目 ...
- amazeui学习笔记--css(常用组件4)--关闭按钮Close
amazeui学习笔记--css(常用组件4)--关闭按钮Close 一.总结 1.关闭按钮基本用法:关闭按钮样式,可以结合其他不同组件使用.对 <a> 或者 <button> ...
- 【学习笔记】一些常用的数学公式
[学习笔记]一些常用的数学公式 手动博客搬家: 本文发表于20181224 11:28:00, 原地址https://blog.csdn.net/suncongbo/article/details/8 ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- amazeui学习笔记--css(常用组件1)--小徽章Badge
amazeui学习笔记--css(常用组件1)--小徽章Badge 一.总结 1.am-badge:添加am-badge来声明小徽章对象 <span class="am-badge a ...
最新文章
- android Tabhost部件
- redhat nginx php mysql_redhat7+nginx+mysql+php
- jzoj1350-游戏(某C组)【SPFA,图,最短路】
- Java BigDecimal Rounding Mode
- PHP+SQLite3简约网址导航、书签管理器网站源码
- 算法时间复杂度分析专题一(帮助快速解题)
- The content of element type “resultMap“ must match “(constructor?,id*,result*,association*,collectio
- MySQL 临时表的原理以及优化手段
- 计算机基础——4.1 数字通信入门
- 3097: Hash Killer I
- 技术解读:Dragonfly 基于 P2P 的智能镜像加速系统 | 龙蜥技术
- Nginx搭建虚拟域名
- 化工厂在岗人员定位系统-化工厂人员定位-化工厂定位-新导智能
- 虞美人盛开的山坡片尾曲_さよならの夏_离别的夏天_歌词_带假名及翻译
- 前端案例-30 Vue常用特性案例汇总
- Python网络爬虫简单教程——第一部
- 安卓9去掉搜索栏_小米9pro桌面下边搜索栏怎么关闭 只需一招即可搞定
- 2020.8.5课堂笔记(多线程)
- java计算机毕业设计租房管理系统源程序+mysql+系统+lw文档+远程调试
- 机器学习笔记 - 用于颜值评分的数据集和算法
热门文章
- 8. PyQt5信号(signals)和槽(slots)
- CSM和PMI-ACP认证有什么区别
- 基于C++的考试系统
- NS3教程(下载、安装、测试)
- 投稿IEEE或Elsevier的文章上传arxiv
- CITA v0.18 新增「基于 Rust 语言的国密算法库」新特性
- 洛谷 P2958 [USACO09OCT]木瓜的丛林Papaya Jungle
- 思迈特软件Smartbi:稳健发展的证券公司如何打造“智慧风控”体系
- 查看linux系统常用的命令,Linux查看系统配置常用命令
- elastalert