1.如何获取pcd文件点云里点的格式,比如是pcl::PointXYZ还是pcl::PointXYZRGB等类型?

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/PCLPointCloud2.h> pcl::PCLPointCloud2 cloud;
pcl::PCDReader reader;
reader.readHeader("C:\fandisk.pcd", cloud);
for (int i = ; i < cloud.fields.size(); i++)
{
std::cout << cloud.fields[i].name;
}

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.如何加快ASCII格式存储,也就是记事本打开可以看到坐标数据的pcd文件读取速度?
建议将pcd文件换成以Binary格式存储。

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/PCLPointCloud2.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("C:\office3-after1.pcd", *cloud);
pcl::io::savePCDFileBinary("C:\office3-after21111.pcd", *cloud);

4.如何给pcl::PointXYZ类型的点云在显示时指定颜色?

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("C:\office3-after21111.pcd", *cloud); pcl::visualization::PCLVisualizer viewer("pointcloud viewer");
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> sig(cloud, , , );
viewer.addPointCloud(cloud, sig, "cloud");
while (!viewer.wasStopped())
{
viewer.spinOnce();
}

5.如何查找点云的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);

6.如何判断点云中的点为无效点,即坐标值为nan,以及如何将点设置为无效点?

#include <pcl/point_types.h>

pcl::PointXYZ p_valid;
p_valid.x = ;
p_valid.y = ;
p_valid.z = ;
std::cout << "Is p_valid valid? " << pcl::isFinite(p_valid) << std::endl; pcl::PointXYZ p_invalid;
p_invalid.x = std::numeric_limits<float>::quiet_NaN();
p_invalid.y = ;
p_invalid.z = ;
std::cout << "Is p_invalid valid? " << pcl::isFinite(p_invalid) << std::endl;

7.如何将无效点从点云中移除?

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/filter.h> typedef pcl::PointCloud<pcl::PointXYZ> CloudType;
CloudType::Ptr cloud(new CloudType);
cloud->is_dense = false;
CloudType::Ptr output_cloud(new CloudType); CloudType::PointType p_nan;
p_nan.x = std::numeric_limits<float>::quiet_NaN();
p_nan.y = std::numeric_limits<float>::quiet_NaN();
p_nan.z = std::numeric_limits<float>::quiet_NaN();
cloud->push_back(p_nan); CloudType::PointType p_valid;
p_valid.x = 1.0f;
cloud->push_back(p_valid); std::cout << "size: " << cloud->points.size() << std::endl; std::vector<int> indices;
pcl::removeNaNFromPointCloud(*cloud, *output_cloud, indices);
std::cout << "size: " << output_cloud->points.size() << std::endl;

8.如果知道需要保存点的序号,如何从原点云中拷贝点到新点云?

#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 = { , , };
pcl::copyPointCloud(*cloud, indexs, *cloudOut);

9.如何从点云里删除和添加点?

#include "stdafx.h"
#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() + ;
cloud->erase(cloud->begin());//删除第5个
pcl::PointXYZ point = { , , };
//在索引号为5的位置1上插入一点,原来的点后移一位
cloud->insert(cloud->begin() + , point);
cloud->push_back(point);//从点云最后面插入一点
std::cout << cloud->points[].x;//输出1

如果删除的点太多建议用上面的方法拷贝到新点云,再赋值给原点云,如果要添加很多点,建议先resize,然后用循环向点云里的添加。

10.PointCloud和PCLPointCloud2类型如何相互转换?

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCLPointCloud2 cloud2;
pcl::io::loadPCDFile("C:\office3-after21111.pcd", cloud2);
pcl::fromPCLPointCloud2(cloud2, *cloud);
pcl::toPCLPointCloud2(*cloud, cloud2);

转自http://www.zhangzscn.com/2015/11/27/pcl%E5%BC%80%E6%BA%90%E5%BA%93%E5%B8%B8%E8%A7%81%E7%BC%96%E7%A8%8B%E9%97%AE%E9%A2%98/

PCL常见编程问题的更多相关文章

  1. C/ C++ 常见编程问题

    C 中容易忽略的问题 1.在C语言中,浮点型变量分为两类: a. 单精度型:类型说明符为float, 在Turbo C 中占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,可提 ...

  2. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  3. C++常见编程--获取当前系统时间

    C++常见编程--获取当前系统时间 文章首发https://www.cppentry.com 本文主要使用time() 及strftime() 函数 C++系统和时间相关的函数基本上都是使用C语言提供 ...

  4. javascript常见编程模式举例

    近期买到手了一本<javascript框架设计>,具体介绍开发js框架所用到的知识.初读一点,乐帝脆弱的理论修养就暴露无遗了,所以专门加强理论修养,重看javascript编程模式的举例. ...

  5. Java编程最差实践(常见编程错误典范)

    转载自  http://macrochen.iteye.com/blog/1393502 每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般 ...

  6. java面试之常见编程题

    1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; ...

  7. PCL常见错误集锦

    来自微信公众号的分享 我刚刚开始接触PCL,懂的东西也很少,所以总是出现各种各样的问题,每次遇见问题的时候要查找各种各样的资料,很费时间.所以,今天我把我遇见的常见问题分享给大家,讲解的步骤尽量详细, ...

  8. Spark常见编程问题解决办法及优化

    目录 1.数据倾斜 2.TopN 3.Join优化 预排序的join cross join 考虑Join顺序 4.根据HashMap.DF等数据集进行filter 5.Join去掉重复的列 6.展开N ...

  9. android开发常见编程错误总结

    1.设置TextView的文本颜色 1 2 3 TextView tv; ... tv.setTextColor(R.color.white); 其实这样设置的颜色是 R.color.white的资源 ...

随机推荐

  1. GPIO相关知识

    参考资料: 1. 维基百科GPIO 2. GPIO博客资料(一) 3. MMIO和PMIO 知识点: ● GPIO是General-purpose input/output的缩写,是一个在集成电路上的 ...

  2. HDU-4526 威威猫系列故事——拼车记 动态规划

    分析:该题有2个地方要注意:所有的车要么不坐要么就坐满,这个贪心策略很容易证明是正确的,还有一点就是最后一辆车除外. #include <cstdlib> #include <cst ...

  3. linux笔记:权限管理-sudo

    sudo可以将只有root可以使用的命令授权给普通用户: 授权的过程实际是修改配置文件: 授权示例: 普通用户使用sudo权限的示例:

  4. 用python的BeautifulSoup分析html 【转】

    原地址:http://www.cnblogs.com/twinsclover/archive/2012/04/26/2471704.html 序言 之前用python爬取网页的时候,一直用的是rege ...

  5. CSS权重及样式优先级问题

    CSS权重值计算 一条样式规则的整体权重值包含四个独立的部分:[A, B, C, D]; (1) A 表示内联样式(写在标签的style属性中),只有 1 或者 0 两个值:对于内联样式,由于没有选择 ...

  6. C# 检测程序运行时间的方法,Stopwatch类

    //需要引用命名空间,System.Diagnostics Stopwatch watch = new Stopwatch(); //实例化一个计时器 watch.Start(); //开始计时 #r ...

  7. python jar

    jpype不好用 pyjnius pip install jnius pip install cython

  8. 新版Chrome自动禁用第三方插件的解决办法[转]

    原文地址:http://www.douban.com/note/375734834/?type=like Chrome的新策略里面禁用了除chrome web store下载的所有第三方扩展,这个很烦 ...

  9. 荣品RP4412开发板摄像头驱动调用及对焦控制

    1.关于更换不同摄像头驱动调用问题. 问:RP4412开发板,我用的摄像头640*480图像预览时OK的,但是我调用1280*720的初始化预览,摄像头没有图像了,是不是camera程序也需要修改? ...

  10. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...