当前位置: 首页 > article >正文

PCL—passThrough 点云直通滤波器

摘自PCL(Point Cloud Library)学习记录(2025) · 语雀


/*
 * @Description: 在PCL 中使用直通滤波器对点云进行滤波处理  https://www.cnblogs.com/li-yao7758258/p/6445831.html
 * @Author: HCQ
 * @Company(School): UCAS
 * @Email: 1756260160@qq.com
 * @Date: 2020-10-20 10:36:02
 * @LastEditTime: 2020-10-20 10:45:57
 * @FilePath: /pcl-learning/09filters滤波/1直通滤波器进行滤波处理/passthrough.cpp
 */
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>

int
main(int argc, char** argv)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);

    //生成并填充点云
    cloud->width = 5;
    cloud->height = 1;
    cloud->points.resize(cloud->width * cloud->height);

    for (size_t i = 0; i < cloud->points.size(); ++i)   //填充数据
    {
        cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
    }

    std::cerr << "Cloud before filtering: " << std::endl;   //打印
    for (size_t i = 0; i < cloud->points.size(); ++i)
        std::cerr << "    " << cloud->points[i].x << " "
        << cloud->points[i].y << " "
        << cloud->points[i].z << std::endl;
    /************************************************************************************
     创建直通滤波器的对象,设立参数,滤波字段名被设置为Z轴方向,可接受的范围为(0.0,1.0)
     即将点云中所有点的Z轴坐标不在该范围内的点过滤掉或保留,这里是过滤掉,由函数setFilterLimitsNegative设定
     ***********************************************************************************/
     // 设置滤波器对象
    pcl::PassThrough<pcl::PointXYZ> pass;
    pass.setInputCloud(cloud);                  //设置输入点云
    pass.setFilterFieldName("z");               //设置过滤时所需要点云类型的Z字段
    pass.setFilterLimits(0.0, 300.0);           //设置在过滤字段的范围
    // //pass.setFilterLimitsNegative(true);         //这个版本太老报错,这个要换成下边的//
    //pass.FilterIndices::setNegative(false);   //这句代码是默认的,写不写都是保留内部点//
    //pass.FilterIndices::setNegative(true);    //-删除-内部点//
    pass.filter(*cloud_filtered);               //执行滤波,保存过滤结果在cloud_filtered

    std::cerr << "Cloud after filtering: " << std::endl;   //打印
    for (size_t i = 0; i < cloud_filtered->points.size(); ++i)
        std::cerr << "    " << cloud_filtered->points[i].x << " "
        << cloud_filtered->points[i].y << " "
        << cloud_filtered->points[i].z << std::endl;

    //pass.setFilterLimitsNegative(true);   //代码默认保留内部的点//


    return (0);
}

注意:这里容易混淆的是setNegative(false);

setNegative(false);   //这句代码是默认false的,即默认保留区域内部点//

设置true,则是删除区域内的点。


http://www.kler.cn/a/593582.html

相关文章:

  • 阿根廷主流收单方式:Rapipago支付
  • 复盘的力量:如何通过复盘提升项目管理水平
  • Postman高级功能深度解析:Mock Server与自动化监控——构建高效API测试与监控体系
  • 【最后203篇系列】020 rocksdb agent
  • Apache Paimon 在抖音集团多场景中的优化实践
  • latex-二项式括号怎么敲?
  • 【嵌入式学习】补码-加减乘除电路
  • Linux系统docker部署Ollama本地大模型及部署Hugging Face开源模型,ollama相关注意点,非ollama模型创建,模型量化,显存建议
  • 服务器相关的硬件知识
  • git推送代码相关学习——(一)
  • llama源码学习·model.py[3]ROPE旋转位置编码(2)旋转角度生成代码
  • pytest基础学习
  • 【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
  • Python IP解析器 ip2region使用
  • P1540 [NOIP 2010 提高组] 机器翻译
  • cmake 之 CMakeLists.txt 中的函数是从哪里来的
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • Linux Vim 寄存器 | 从基础分类到高级应用
  • python学智能算法(八)|决策树
  • Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?