PCL passfilter 使用

匿名 (未验证) 提交于 2019-12-02 23:43:01

 #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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!