之前已经写过一篇讲pcl安装在Windows的博客,现在开始跟着官网的例子学习pcl。
pcl(point cloud library)是一个点云库,包括filter、feature等内容,现在开始从filter的第一个例子passthrough开始。
#include <iostream>
#include <pcl\point_types.h>
#include <pcl\filters\passthrough.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCDReader reader;//读
pcl::visualization::CloudViewer viewer("cloud viewer");//显示
reader.read<pcl::PointXYZ>("table_scene_lms400.pcd", *cloud);//加载pcd文件
viewer.showCloud(cloud);//显示cloud
system("pause");//暂停
/************************************************************************************
创建直通滤波器的对象,设立参数,滤波字段名被设置为Z轴方向,可接受的范围为(0.0,1.0)
即将点云中所有点的Z轴坐标不在该范围内的点过滤掉或保留,这里是过滤掉,由函数setFilterLimitsNegative设定
***********************************************************************************/
// 设置滤波器对象
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud(cloud);
pass.setFilterFieldName("z");
pass.setFilterLimits(-1.2, 0);//保留或过滤z轴方向-1.2到0
//pass.setFilterLimitsNegative(true);//设置过滤器限制负//设置保留范围内false
pass.filter(*cloud_filtered);
std::cout << "after" << std::endl;
viewer.showCloud(cloud_filtered);
system("pause");
pass.setFilterLimitsNegative(true);//设置过滤掉范围内true
pass.filter(*cloud_filtered);
viewer.showCloud(cloud_filtered);
system("pause");
return 0;
}
这是过滤以前的文件
这是保留z范围内的图片
这是过滤掉z范围内的图片
程序代码可从我的资源中下载:http://download.csdn.net/detail/zpp13hao1/9821119