基于PCL按照高度切分点云

如下基于PCL设置高度区间,对点云进行分割处理

void Multilayer() {
	string filename = "XXXX";
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (pcl::io::loadPCDFile<pcl::PointXYZ>(filename, *cloud) == -1)//打开点云文件。
	{
		PCL_ERROR("Couldn't read that pcd file\n");
	}
    //设置高度区间
	float DivisionHeight[9] = { 0.00,1.35,1.91,2.55,2.84,3.50,4.00,5.80,11.55 };
	// 对每个分割高度进行处理
	for (int i = 0; i < 8; ++i) {
		pcl::ExtractIndices<pcl::PointXYZ> extract;
		pcl::PointIndices::Ptr inliers(new pcl::PointIndices);

		// 遍历点云,将满足高度条件的点加入索引集合
		for (std::size_t j = 0; j < cloud->points.size(); ++j) {
			if (cloud->points[j].y >= DivisionHeight[i] && cloud->points[j].y < DivisionHeight[i + 1]) {
				inliers->indices.push_back(j);
			}
		}
		// 设置要提取的点的索引
		extract.setInputCloud(cloud);
		extract.setIndices(inliers);
		extract.setNegative(false); // 设置为false,表示提取索引对应的点而不是剔除它们

		// 执行提取操作
		pcl::PointCloud<pcl::PointXYZ>::Ptr segmentedCloud(new pcl::PointCloud<pcl::PointXYZ>);
		extract.filter(*segmentedCloud);

		// 保存分割后的点云
		std::string outputFilename = "segmented_cloud_" + std::to_string(i) + ".pcd";
		pcl::io::savePCDFile(outputFilename, *segmentedCloud);
	}
}

进行如下操作后将切割文件在cloudcompare中打开可见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值