PCL 基础计算【判断点云中哪些点在box盒中 + 求距离某点最远的点云点 + 获取给定点云点的最大最小XYZ值 + 计算多边形点云的面积】(Common_Common)

PCL专栏目录及须知-CSDN博客

注:这些计算都都是只调Common中的公共函数,因此不单独写main()函数

只通过控制台打印验证是否可以正常运行,结果是否正确,不做可视化展示

使用时直接把代码拷贝进去就行。

1.判断点云中哪些点在box盒中

#include <pcl/common/common.h>

	/****************读取点云********************/
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("D:/code/csdn/data/person3.pcd", *cloud_in);   // 加载原始点云数据

    // 计算
    Eigen::Vector4f minPt = { 0,0,0,0 }, maxPt = { 40,40,40,0 };
    pcl::Indices indices;												// 处于box内部的点云点的索引
    pcl::getPointsInBox(*cloud_in, minPt, maxPt, indices);

2.给定一个点,求距离该点最远的点云点

#include <pcl/common/common.h>

	/****************读取点云********************/
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("D:/code/csdn/data/person3.pcd", *cloud_in);   // 加载原始点云数据

    // 计算
    Eigen::Vector4f pointPt(0, 0, 0, 0), maxPtDis(0, 0, 0, 0);
    pcl::getMaxDistance(*cloud_in, pointPt, maxPtDis);					// 在所有点云中,寻找距离该点最远的点云点

    Eigen::Vector4f pointPt1(0, 0, 0, 0), maxPtDis1(0, 0, 0, 0);
    pcl::Indices indicesDis;
    indicesDis.push_back(0);											// 手动添加索引,实际应用中一般是计算得出的结果
    indicesDis.push_back(1);
    indicesDis.push_back(2);
    indicesDis.push_back(3);
    pcl::getMaxDistance(*cloud_in, indicesDis, pointPt, maxPtDis);		// 在点云的这部分索引中,寻找距离该点最远的点云

3.获取给定点云点的最大最小XYZ值

#include <pcl/common/common.h>

	/****************读取点云********************/
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("D:/code/csdn/data/person3.pcd", *cloud_in);   // 加载原始点云数据

    // 计算
    Eigen::Vector4f minPt3DV(0, 0, 0, 0), maxPt3DV(0, 0, 0, 0);
	pcl::getMinMax3D(*cloud_in, minPt3DV, maxPt3DV);					// 获取给定点云点的最大最小值(vector形式保存)

	Eigen::Vector4f minPt3DVI(0, 0, 0, 0), maxPt3DVI(0, 0, 0, 0);
	pcl::Indices indices3dVI;
	indices3dVI.push_back(0);											// 手动添加索引,一般是计算得出的结果
	indices3dVI.push_back(1);
	indices3dVI.push_back(2);
	indices3dVI.push_back(3);
	pcl::getMinMax3D(*cloud_in, indices3dVI, minPt3DVI, maxPt3DVI);		// 从点云的这部分索引中,获取给定点云点的最大最小值(vector形式保存)

	pcl::PointXYZ minPt3DP, maxPt3DP;
	pcl::getMinMax3D(*cloud_in, minPt3DP, maxPt3DP);					// 获取给定点云点的最大最小值(pcl::pointType形式保存)

4.计算多边形点云的面积(多边形的顶点需要以逆时针排序)

#include <pcl/common/common.h>

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPol (new pcl::PointCloud<pcl::PointXYZ>);			// 手动写入逆时针的多边形顶点
	cloudPol->push_back(pcl::PointXYZ(1, 0, 0));
	cloudPol->push_back(pcl::PointXYZ(-1, 0, 0));
	cloudPol->push_back(pcl::PointXYZ(0, 2, 0));
	float result = pcl::calculatePolygonArea(*cloudPol);

结果打印:

// 打印
	std::cout << "判断点云点在box盒中(打印点个数):" << indices.size() << std::endl;
	std::cout << "在点云中,给定一个点,求距离该点最远的点云点(打印最远点坐标):" << maxPtDis << std::endl;
	std::cout << "获取给定点云点的最大值:" << maxPt3DV << std::endl;
	std::cout << "获取给定点云点的最小值:" << minPt3DV << std::endl;
	std::cout << "计算多边形点云的面积:" << result << std::endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值