PCL点云切片算法程序

本文详细探讨了PCL库中的点云切片算法,通过C++实现,结合拓扑学原理,讲解了如何对三维点云进行二维截取,包括设置切片厚度、方向和位置等关键步骤,旨在帮助读者理解并应用该算法。
摘要由CSDN通过智能技术生成
#include <pcl/ModelCoefficients.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/passthrough.h>
#include <pcl/features/normal_3d.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/centroid.h>
#include <pcl/common/transforms.h>
#include <pcl/common/common.h>
#include <iostream>
#include <pcl/visualization/cloud_viewer.h>
#include<string>
#include<math.h>


int slice2(std::string inputPCDName,std::vector<pcl::PointCloud<pcl::PointXYZ> > &slicePointsAssemble,double sliceInterval){
    //boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
   // viewer->setBackgroundColor (0, 0, 0);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile(inputPCDName, *cloud);

    pcl::PointXYZ minValues;//用于存放三个轴的最小值
    pcl::PointXYZ maxValues;//用于存放三个轴的最大值
    pcl::getMinMax3D(*cloud,minValues,maxValues);
    double zMax=maxValues.z;
    double zMin=minValues.z;
    int sliceNum=floor((zMax-zMin)/sliceInterval)-1;
    std::cout<<"slice number:   "<<sliceNum<<endl;
    double sliceBeginCoordinate=zMin+(zMax-zMin-sliceNum*sliceInterval)/2+sliceInterval/2;
    std::cout<<"slice Begin Coordinate:   "<<sliceBeginCoordinate<<endl;
    std::cout<<"slice End Coordinate:   "<<sliceBeginCoordinate+sliceNum*sliceInterval<<endl;
    int sliceNumCount=0;

//for(float base=sliceBeginCoordinate;base<=sliceBeginCoordinate+sliceNum*sliceInterval;base=base+sliceInterval){
for(float base=-900;base<=100;base=base+100){
    int label=3;
    float d=sliceInterval;
    float bs=base;
    float radius_min=10;
    float radius_max=400;

/*
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    cloud->width = 100;             //此处点云数量
      cloud->height = 1;                //表示点云为无序点云
      cloud->points.resize (cloud->width * cloud->height);

    for(int i=0;i<=10;i=i+2){

     cloud->points[i].x=0;
     clou
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值