使用PCL直通滤波器基于高程值批量提取las格式点云地面点数据

2023-10-27

1  运行环境:

        VS 2015 + PCL 库 + liblas库

2  代码

2.1  批量获取指定路径下所有文件路径函数:

vector<string> getFiles(string path, vector<string>& files)
{
	intptr_t   hFile = 0;//文件句柄,过会儿用来查找
	struct _finddata_t fileinfo;//文件信息
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
		//如果查找到第一个文件
	{
		do
		{
			if ((fileinfo.attrib &  _A_SUBDIR))//如果是文件夹
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFiles(p.assign(path).append("//").append(fileinfo.name), files);
			}
			else//如果是文件
			{
				files.push_back(p.assign(path).append("//").append(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0); //能寻找到其他文件

		_findclose(hFile);  //结束查找,关闭句柄
	}
	return files;
}

2.2   利用直通滤波器获取las点云数据地面点

void splitGroud(string las_file, string pcd_file, double instance )
{

	std::ifstream ifs(las_file, std::ios::in | std::ios::binary); // 打开项目目录下的las文件

	liblas::ReaderFactory f;
	liblas::Reader reader = f.CreateWithStream(ifs); // 读取las文件

	int nbPoints = reader.GetHeader().GetPointRecordsCount();//获取las数据点的个数
	cout << "las数据点的个数为:" << nbPoints << endl;

	pcl::PointCloud<pcl::PointXYZI>::Ptr cloudPtr(new pcl::PointCloud<pcl::PointXYZI>);

	cloudPtr->width = nbPoints;
	cloudPtr->height = 1;
	cloudPtr->is_dense = false;
	cloudPtr->resize(cloudPtr->width * cloudPtr->height);

	int i = 0;
	cout << "->正在执行las转pcd...\n";
	while (reader.ReadNextPoint())
	{
		// 获取las数据的x,y,z, intensity 信息
		cloudPtr->points[i].x = reader.GetPoint().GetX();
		cloudPtr->points[i].y = reader.GetPoint().GetY();
		cloudPtr->points[i].z = reader.GetPoint().GetZ();
		cloudPtr->points[i].intensity = reader.GetPoint().GetIntensity();
		i++;
	}
	cout << *cloudPtr << endl;

	// 直通滤波器对点云进行处理
	pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_filtered(new             pcl::PointCloud<pcl::PointXYZI>);
	pcl::PassThrough<pcl::PointXYZI> passthrough;
	passthrough.setInputCloud(cloudPtr);
	passthrough.setFilterFieldName("z");
	passthrough.setFilterLimits(0.0, instance);
	passthrough.setFilterLimitsNegative(false); // true 表示保留范围内
	passthrough.filter(*cloud_filtered);

	std::cerr << "Ground cloud after filtering: " << std::endl;
	std::cerr << *cloud_filtered << std::endl;

	pcl::PCDWriter writer;
	writer.write<pcl::PointXYZI>(pcd_file, *cloud_filtered, false);
	return;
}

2.3  main函数

#include <iostream>
#include <cstdlib>
#include <liblas/liblas.hpp>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <windows.h>
#include<pcl/filters/passthrough.h> //直通滤波器头文件
#include<vector>
#include <io.h> 


using namespace std;
using namespace pcl;

int main()
{  
	double instance[10] = { 20, 23, 25, 26, 28, 28.5, 29.3, 30.1, 31.1, 33.2};    // 阈值数组

	const string las_path = "..//las";
	const string pcd_path = "..//pcd";
	string savefilename;
	vector<string> las_file;
	getFiles(las_path, las_file);
    int num = las_path.size();

	for (int i = 0; i < las_file.size(); i++)
	{
		savefilename = pcd_path + las_file[i].substr(num,13) + ".pcd";
		splitGroud(las_file[i], savefilename, instance[i]);
	}
	system("pause");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用PCL直通滤波器基于高程值批量提取las格式点云地面点数据 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • ASP.NET微信公众号开发实记之一 接入配置

    第一步 填写服务器配置 登录微信公众平台官网后 在公众平台后台管理页面 开发者中心页 点击 修改配置 按钮 填写服务器地址 URL Token和EncodingAESKey 其中URL是开发者用来接收微信消息和事件的接口URL Token可
  • 【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)

    需要源码请点赞关注收藏后评论区留言并且私信 在游戏开发过程中 游戏界面占据了非常重要的地位 玩家启动游戏的时候 首先看到的就是游戏的UI 其中包含图片 按钮和高级控件等等 UGUI和GUI是Unity 3D中最常用的两个UI系统 一 GUI
  • VMware workstation搭建华为FusionCompute实验环境(五)保姆级安装教程,可运行虚拟机

    VMware安装VRM 1 打开VMware 点击文件 选择新建虚拟机 2 选择 自定义 3 硬件兼容性保持默认 4 选择稍后安装操作系统 5 操作系统选择 ESXI 6 输入虚拟机名称及虚拟机保存位置 7 配置处理器 最少4个 8 配置内
  • 低功耗设计及其UPF实现第一节

    第一节 低功耗设计的基本单元和概念 大家好 最近疫情宅家 工作没有那么忙 所以写一下之前从事过的低功耗设计并和大家分享 希望大家多多提出不足 本次总结一共分为若干小节 还没定 我会从最最基础的低功耗的概念和器件开始分享 尽量全部说干货 不过
  • 暑假补卷2——进程控制:

    进程地址空间 接进程概念 写时拷贝 通常 父子代码共享 父子再不写入时 数据也是共享的 当任意一方试图写入 便以写时拷贝的方式各自一份副本 具体见下图 fork常规用法 一个父进程希望复制自己 使父子进程同时执行不同的代码段 例如 父进程等
  • 晶振/晶体布线原则

    1 晶振布放和走线同IC在相同层 50欧姆走线 布线层到参考层间挖开GND 晶振模块远离其他器件 2 晶体模块参考层尽量使用完整GND层 没有完整GND层可用 也要在晶振下面完全铺地 3 走线仅可能短 两根线尽量等长且尽量紧密耦合 4 将负
  • 学生选课系统项目设计报告

    设 计 报 告 报告题目 学生选课系统的数据库设计 摘 要 在当下疫情肆虐的时期 线上教学成为了主流方式 各种教学活动都转为线上 网上选课系统成为学生课程分配的主要方式 传统的选课管理模式已经无法满足当前的实际需求 为此 我们开发了学生选课
  • 2023年最新最全软件测试用例大全,轻松学会测试用例,有手就行

    一 概念 测试用例的基本概念 测试用例 Test Case 是为了实施测试而向被测试的系统提供的一组集合 这组集合包含 测试环境 操作步骤 测试数据 预期结果等要素 主要步骤 测试环境 测试步骤 测试数据 预期结果 网易邮箱注册成功测试用例
  • torchvision中的resnet的实现

    D pythonCodes 深度学习实验 经典分类网络 6 ResNet resnet手动实现实验 一 ResNet网络模型详解 1 1 整体结构 可以看到 resnet34主要就是由layer1 4组成 而这4个layer分别就是由3 4
  • Web前端iframe使用以及页面通信postmessage

    iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了 iframe常用属性 1 frameborder 是否显示边框 1 yes 0 no 2 height 框架作为一个普通元素的高度 建议在使
  • AppsFlyer 研究(六) 域名及用户邀请归因

    一 AppsFlyer涉及的域名 1 https conversions appsflyer com 该域名用于SDK上报App首次打开的session数据 包含用户的设备id 供AF归因 2 https gcdsdk appsflyer
  • 百人计划 图形1.4 PC手机图形API介绍作业/个人笔记

    作业部分 1 本人对Vulkan不了解 下述文字根据网上资料搜集总结而来 如日后有新的想法将更新在此段文字之后 Vulkan优点是轻薄 降低CPU的开销 缺点是相对繁琐 接口多概念多 Vulkan让我想到houdini 功能强大 建模特效程
  • 2014-10 u-boot make过程分析

    Based on u boot 2014 10 当我们已经做完make xxx defconfig后 这个流程可以参看 2014 10 u boot make xxx defconfig 过程分析 在源码顶层目录生成 config文件 然后
  • $(...).datetimepicker is not a function

    1 jQuery版本不一致 2 datetimepicker js放在最后引入 这种要先引入JS或者JQ 最后才引入这个时间JS文件
  • 共享型智能指针的实现share_pointer

    智能指针是一个类 它产生的是一个类对象 而不是一个原生的指针对象 但是为了减少类对象与针对对象使用的差异性 所以share ptr类故意重载了两种常见的指针操作符 和 gt 从而share ptr与普通指针使用方式一样 简言之 就是shar
  • stm32f10x中GPIOA理解(一)

    stm32中GPIOA对于arm芯片来说 它属于芯片内外部的外设 对于单片机来说 它是按时间脉冲来执行的 那么GPIOA挂在RCC APB2Periph时钟上面的 在这里我们先理解GPIOA 在地址 STM32的外设起始基地址为0x4000
  • java heap space怎么解决_java heap space错误的解决方法是什么

    java heap space错误的解决方法是 1 设置环境变量 代码为 set JAVA OPTS Xms32m Xmx512m 2 在执行JAVA类文件时加上相关参数 参数为 java Xms32m Xmx800m cl java he
  • 万户协同办公平台 ezoffice存在未授权访问漏洞 附POC

    文章目录 万户协同办公平台 ezoffice存在未授权访问漏洞 附POC 1 万户协同办公平台 ezoffice简介 2 漏洞描述 3 影响版本 4 fofa查询语句 5 漏洞复现 6 POC EXP 7 整改意见 8 往期回顾 万户协同办
  • Unity资源之Resources目录

    介绍 将资产存储在一个或多个名为Resources的文件夹中 并在运行时使用Resources API 从这些资产加载或卸载对象 Resources System的最佳实践 不要使用它 出于以下几个原因 提出了这一强烈建议 使用 Resou
  • 使用PCL直通滤波器基于高程值批量提取las格式点云地面点数据

    1 运行环境 VS 2015 PCL 库 liblas库 2 代码 2 1 批量获取指定路径下所有文件路径函数 vector