该篇是读取一张点云数据后,按照Y轴的一半裁点云数据并显示
#include<iostream>
#include<pcl/io/ply_io.h>
#include<pcl/visualization/cloud_viewer.h>
#include <pcl/common/common.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/crop_box.h>
int user_data;
using std::cout;
using namespace std;
int main() {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPLYFile<pcl::PointXYZ>("rabbit.ply", *cloud) == -1) {
PCL_ERROR("Couldn't read file test_pcd.pcd \n");
return (-1);
}
pcl::PointXYZ minValues;
pcl::PointXYZ maxValues;
pcl::getMinMax3D(*cloud, minValues, maxValues);//计算三个轴的最大最小值
double yMax = maxValues.y;
double yMin = minValues.y;
double startvale= yMin;//设置切割的起始值
double endtvale= yMax;//设置切割的终点值
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);//切割后的点云数据
pcl::PassThrough<pcl::PointXYZ> pass;//直通滤波
pass.setInputCloud(cloud);
pass.setFilterFieldName("y"); //选择y轴切割
pass.setFilterLimits(startvale, endvale); //切片范围
pass.filter(*cloud1);
cout << cloud->points.size() << endl;
cout << cloud1->points.size() << endl;
pcl::visualization::PCLVisualizer viewer("display1");
viewer.setBackgroundColor(0, 0, 0);//设置背景颜色
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(cloud, "z");//按照z字段进行渲染
viewer.addPointCloud<pcl::PointXYZ>(cloud, fildColor, "sample");
pcl::visualization::PCLVisualizer viewer1("display2");
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor1(cloud1, "z");
viewer1.addPointCloud<pcl::PointXYZ>(cloud1, fildColor1, "sample2");
viewer1.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample2");
while (!viewer.wasStopped()||!viewer1.wasStopped())
{
viewer1.spinOnce();
viewer.spinOnce();
}
system("pause");
return 0;
运行结果如下: