PCL点云过滤模块整理(二)
前言:
本章主要讲点云的投影和索引提取。点云投影主要是将三维结构投影到二维平面上,点云索引提取在后续点云分割中,可能会用到。今天先记录一下点云投影;
一、点云投影
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
using namespace pcl;
int main(int argc, char** argv)
//读取文件
PCDReader reader;
PCDWriter writer;
PointCloud<pcl::PointXYZRGB>::Ptr cloud(new PointCloud<pcl::PointXYZRGB>);
PointCloud<pcl::PointXYZRGB>::Ptr cloud_f(new PointCloud<pcl::PointXYZRGB>);
reader.read("E:/code/date/Coal.pcd", *cloud);
//我们使用平面模型,其中ax + by + cz + d = 0,其中a = b = d = 0,并且c = 1,或者换句话说,XY平面。
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
coefficients->values.resize(4);
coefficients->values[0] = coefficients->values[1] = 0;
coefficients->values[2] = 1.0;
coefficients->values[3] = 0;
//我们创建投影对象,并使用上面定义的模型作为投影模型
pcl::ProjectInliers<pcl::PointXYZRGB> proj;
proj.setModelType(pcl::SACMODEL_PLANE);
proj.setInputCloud(cloud);
proj.setModelCoefficients(coefficients);
proj.filter(*cloud_f);
//可视化
pcl::visualization::PCLVisualizer viewer("cloud_viewer");
viewer.setBackgroundColor(255, 255, 255);
viewer.addPointCloud(cloud_f);
//viewer.addCoordinateSystem();
while (!viewer.wasStopped())
viewer.spinOnce();
return(0);