#include "stdafx.h" #include <iostream> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> #include <pcl/visualization/cloud_viewer.h> using namespace std; 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>); // Fill in the cloud data 随机产生点云数据 5个点 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); } //显示滤波前的点云 /*pcl::visualization::CloudViewer viewer("cloud viewer"); viewer.showCloud(cloud); system("pause");*/ pcl::visualization::PCLVisualizer viewer("passthrough viewer"); //设置点云颜色 pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color_handler(cloud, 255, 255, 255); //滤波前原始点云颜色为黑色 viewer.addPointCloud(cloud, cloud_color_handler, "origin cloud"); //开始滤波 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; // Create the filtering object pcl::PassThrough<pcl::PointXYZ> pass; pass.setInputCloud(cloud); pass.setFilterFieldName("z"); pass.setFilterLimits(0.0, 500); //pass.setKeepOrganized(true); //pass.setFilterLimitsNegative (true); pass.filter(*cloud_filtered); cout << "cloud_filtered "<<cloud_filtered->points.size() << endl; pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> filtered_cloud_handler(cloud_filtered, 230, 20, 20);//设置滤波后的点云颜色为 红色 viewer.addPointCloud(cloud_filtered, filtered_cloud_handler, "filtered cloud"); viewer.setBackgroundColor(0.5, 0.5, 0.5, 0); viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "origin cloud"); viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "filtered cloud"); while (!viewer.wasStopped()){ viewer.spinOnce(); } 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; /*pcl::visualization::CloudViewer viewer1("cloud viewer"); viewer1.showCloud(cloud_filtered); system("pause");*/ return (0); }
文章来源: https://blog.csdn.net/zhaoxr233/article/details/91996737