首页 > 其他分享 >一些点云的小知识,从官方文档中发现的例子

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

时间:2024-09-27 09:34:07浏览次数:9  
标签:cloud2 例子 文档 pcl 点云 PointCloud cloud points

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 cloud
	using PointType = pcl::PointXYZ;
	using CloudType = pcl::PointCloud<PointType>;
	CloudType::Ptr cloud(new CloudType);

	// Make the cloud a 10x10 grid
	cloud->height = 10;
	cloud->width = 10;
	cloud->is_dense = true;
	cloud->resize(cloud->height * cloud->width);

	// Output the (0,0) point
	std::cout << (*cloud)(0, 0) << std::endl;

	// Set the (0,0) point
	PointType p; p.x = 1; p.y = 2; p.z = 3;
	(*cloud)(0, 0) = p;

	// Confirm that the point was set
	std::cout << (*cloud)(0, 0) << std::endl;

  结果:

 

标签:cloud2,例子,文档,pcl,点云,PointCloud,cloud,points
From: https://www.cnblogs.com/yaoshunyu/p/18435030

相关文章

  • Open3D 点云分割之最小图割算法(C++)
    文章目录一、原理概述1.1基本原理1.2最小割算法二、实现代码三、实现代码参考资料一、原理概述1.1基本原理(1)首先用一个无向图G=<V,E>来表示要分割的点云,V和E分别是顶点和边的集合(构建无向图),其中每条边均有着相应的权重。不同于普通的图结构,GraphCuts图......
  • 文档的力量:阅读如何改变我在 JamSphere 上使用 Redux 的体验
    作为开发人员,我们经常发现自己一头扎进新的库或框架,渴望将我们的想法变为现实。跳过文档并直接跳到编码的诱惑很强烈——毕竟,这有多难呢?但正如我通过构建JamSphere(音乐管理平台)的经验所了解到的那样,跳过这关键的一步可能会将顺利的旅程变成充满挑战的艰苦战斗。跳过文档的......
  • 学习技巧: word文档中写论文会需要的技巧
    之前经常给大家分享办公技巧,今天想给大学生朋友分享一些写论文时候会用到的技巧。技巧一:图片、表格编号及引用论文中少不了图片、表格,而且还需要进行编号,如果我们纯靠自己手动输入,我们需要调节位置还有字体大小什么的,但是我们可以自动编号。方法如下:首先我们先插入图片,右键......
  • # 使用VBA删除Word文档最后一页的空白页
    使用VBA删除Word文档最后一页的空白页本教程将指导您如何使用VBA(VisualBasicforApplications)删除MicrosoftWord文档最后一页的空白页。详细代码使用流程参照上一篇博客增加空白页,替换代码部分即可步骤打开Word文档打开包含要删除的空白页的Word文档。打开Visual......
  • 【项目案例】嵌入式Linux比较好的10+练手项目推荐,附项目文档/源码/视频
    后台私信小雯老师,回复“嵌入式Linux项目”,免费获取以下所有项目配套源码及文档。练手项目推荐 1 智能猫眼项目功能介绍:1.人脸识别:基于百度专业的深度学习算法和海量数据训练可进行人脸识别,轻松知晓访客身份;2.智能报警:实时检测非法闯入,可以自动布防,当触发警报时实时报警,最短时间......
  • Markdown语法文档
    md语法文档Markdown(简称MD)是一种轻量级标记语言,可以用来快速编写结构清晰、内容丰富的文档。下面是一些常用的Markdown语法:目录md语法文档一、标题&目录二、列表&引用三、字体四、线条五、网页链接&图像六、表格七、代码域八、注释&变量九、嵌入十、表情符号一、标......
  • 对PostgreSQL中的慢查询进行分析和优化的操作指南例子解析
    代码示例:在PostgreSQL中对慢查询进行分析和优化是一个系统性的工作,涉及到多个方面。以下是一些操作指南和示例:识别慢查询:通过配置log_min_duration_statement参数,让PostgreSQL记录执行时间超过特定阈值的查询。使用pg_stat_statements扩展来收集查询的执行统计信息,包括......
  • PostgreSQL慢SQL的定位排查方法例子解析
    代码示例:定位和排查PostgreSQL中的慢SQL查询是一个系统性的工作,通常涉及多个步骤和工具。以下是一个详细的排查流程示例:启用慢查询日志:首先,你需要确认慢查询日志是否已经开启。可以通过查询pg_settings视图来检查log_min_duration_statement的值。如果该值为-1,则表示慢......
  • 【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频
    练手项目推荐 1 智能小车项目功能介绍:本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。1.应用端,采用微信小程序作为应用端控制界面。在开发微信小程序端之前,需要熟悉JavaScript语言、CSS语言、XML语言和JSON语言。在微信小程序端的控制小车界面中需要输入......
  • 【开题报告+文档+源码】基于SpringBoot的占航快递服务管理系统的设计与实现
    项目背景与意义随着电子商务的迅猛发展和人们生活水平的提高,快递服务行业正经历着前所未有的增长。占航快递公司作为国内知名的快递企业之一,面临着巨大的机遇和挑战。传统的快递服务管理方式已经无法满足日益增长的业务需求,快递服务流程中的问题逐渐凸显,如信息不透明、配送效......