一些点云的小知识,从官方文档中发现的例子

news/2024/9/27 9:41:44

1、判断点云的点是否是有效的

	pcl::PointXYZ p_valid;p_valid.x = 0;p_valid.y = 0;p_valid.z = 0;std::cout << "Is p_valid valid? " << pcl::isFinite(p_valid) << std::endl;// If any component is NaN, the point is not finite.pcl::PointXYZ p_invalid;p_invalid.x = std::numeric_limits<float>::quiet_NaN();p_invalid.y = 0;p_invalid.z = 0;std::cout << "Is p_invalid valid? " << pcl::isFinite(p_invalid) << std::endl;

  打印结果:

 2、复制同类的点云

	// 拷贝点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());pcl::PointCloud<pcl::PointXYZ>::PointType p;// 相当于 pcl::PointXYZ p;p.x = 1;p.y = 2;p.z = 3;cloud->push_back(p);std::cout << p.x << " " << p.y << " " << p.z << std::endl;pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>());copyPointCloud(*cloud, *cloud2);// 相同类型复制pcl::PointCloud<pcl::PointXYZ>::PointType p_retrieved = (*cloud2)[0];//pcl::PointXYZ p_retrieved = cloud2->points.at(0);// 同上std::cout << p_retrieved.x << " " << p_retrieved.y << " " << p_retrieved.z << std::endl;

  结果:

 3、 类型不同的点云复制

// 拷贝点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());pcl::PointCloud<pcl::PointXYZ>::PointType p;// 相当于 pcl::PointXYZ p;p.x = 1;p.y = 2;p.z = 3;cloud->push_back(p);std::cout << p.x << " " << p.y << " " << p.z << std::endl;pcl::PointCloud<pcl::PointNormal>::Ptr cloud2(new pcl::PointCloud<pcl::PointNormal>());copyPointCloud(*cloud, *cloud2);// 不同类型复制,注意cloud2是包含点和法线的,若类型是pcl::Normal会报错//pcl::PointCloud<pcl::PointNormal>::PointType p_retrieved = (*cloud2)[0];pcl::PointNormal p_retrieved = cloud2->points.at(0);// 同上std::cout << p_retrieved.x << " " << p_retrieved.y << " " << p_retrieved.z << std::endl;std::cout << cloud2->points.at(0).x << " " << cloud2->points.at(0).y << " " << cloud2->points.at(0).z << std::endl;std::cout << cloud2->points.at(0).normal[0] << std::endl;std::cout << cloud2->points.at(0).normal_y << std::endl;std::cout << cloud2->points.at(0).normal[2] << std::endl;

  结果:

 4、获取导入点云文件的最大值和最小值点

    pcl::PointXYZ minPt, maxPt;pcl::getMinMax3D(*n.cloud, minPt, maxPt);std::cout << "Max x: " << maxPt.x << std::endl;std::cout << "Max y: " << maxPt.y << std::endl;std::cout << "Max z: " << maxPt.z << std::endl;std::cout << "Min x: " << minPt.x << std::endl;std::cout << "Min y: " << minPt.y << std::endl;std::cout << "Min z: " << minPt.z << std::endl;    

  结果:

 另一种写法:

// 遍历点云区间for (const auto& p : n.cloud->points){if (minX > p.x) minX = p.x;if (minX > p.y) minY = p.y;if (minX > p.z) minZ = p.z;if (maxX < p.x) maxX = p.x;if (maxY < p.y) maxY = p.y;if (maxZ < p.z) maxZ = p.z;}qDebug() << minX << minY << minZ << maxX << maxY << maxZ;

  结果:

导入的是同一个文件,但为什么结果不一样呢,因为这个没有做无效点判断,而上面那个底层是有判断的

 

5、组织有序的点云

	// Setup the cloudusing PointType = pcl::PointXYZ;using CloudType = pcl::PointCloud<PointType>;CloudType::Ptr cloud(new CloudType);// Make the cloud a 10x10 gridcloud->height = 10;cloud->width = 10;cloud->is_dense = true;cloud->resize(cloud->height * cloud->width);// Output the (0,0) pointstd::cout << (*cloud)(0, 0) << std::endl;// Set the (0,0) pointPointType p; p.x = 1; p.y = 2; p.z = 3;(*cloud)(0, 0) = p;// Confirm that the point was setstd::cout << (*cloud)(0, 0) << std::endl;

  结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65295.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Git 与远程分支

我们经常需要对远程仓库里的分支进行更新。90.远程仓库和分支 我们经常需要对远程仓库里的分支进行更新。 ‍ 当从远程库 clone 时,默认情况下,只会拉取 master ​分支,并且会将本地的 master 分支和远程的 master 分支关联起来: $ git branch * master‍ ‍ 推送本地分支 …

pbootcms通过会员自带上传实现留言表单图片文件上传功能

在PBootCMS 3.0会员版本中,你可以通过修改会员上传头像的功能来实现留言上传图片的功能。以下是详细的步骤和示例代码: 步骤复制上传文件将member/comm/upload.html文件复制到上一层目录,命名为comm/upload.html。修改上传接口修改upload.html文件中的上传接口。 将uploadUr…

ctfshow-web入门-信息收集

web1 直接右键检查得出flag

pbootcms上一篇下一篇调用 如何把“没有了”改成英文

在PBootCMS中,如果你希望将“上一篇”和“下一篇”的提示文本从默认的“没有了”改为英文,可以通过添加参数来实现。以下是如何具体操作的步骤和示例代码: 示例代码 原始代码上一篇:{content:precontent} 下一篇:{content:nextcontent}修改后的代码上一篇:{content:preco…

pbootcms被挂马终极解决方案

当PBootCMS网站被黑客攻击并挂马时,需要采取一系列措施来修复和防止再次被攻击。以下是一些具体的步骤和建议: 解决方案替换核心文件替换apps和core文件夹的内容。 如果本地没有备份,可以选择升级到最新版本,因为官方通常会修复已知的安全漏洞。修改robots.txt文件在robots…

排查maven 冲突及解决方式

Maven Maven 是一个以项目为中心的自动化构建工具,主要用于Java项目的管理和构建。它提供了一种统一的方式来描述项目的结构、依赖关系和构建过程,简化了项目的构建和管理。 Maven 的主要特点:项目对象模型(POM):Maven 使用pom.xml文件来定义项目的依赖、插件和构建配置。…

Robot Framework 自动化测试部署常见问题及处理方法(三)

书接上文 8.关于IE浏览器 IE浏览器必须是原生版,即Windows系统原版,非手动升级后的版本 9.用例执行过程中,遇到元素定位不到的情况 原因: ⑴xpath动态变化 ⑵有frame/iframe ⑶没有设置等待,元素未加载完成 解决方法: ⑴若xpath动态变化:重写xpath ⑵若有frame/iframe:…

xxl-job之框架讲解和使用

目录1 xxl-job1.1 前言1.1.1 xxl-job简介1.1.2 任务调度1.1.3 分布式任务调度平台1.2 使用 xxl-job1.2.1 dokcer 安装 xxl-job1.2.1.1 拉取镜像1.2.1.2 创建配置文件1.2.1.3 执行 docker 命令1.2.1.4 登录查看1.2.2 Spring Boot 项目集成 xxl-job1.2.2.1 pom依赖与配置文件1.2.…