天天看点

点云数据投影到平面上

#include <iostream>

#include <pcl/io/pcd_io.h>

#include <pcl/point_types.h>

#include <pcl/ModelCoefficients.h>

#include <pcl/filters/project_inliers.h>

int main(int argc, char** argv)

{

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);

// Fill in the cloud data

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);

}

std::cerr << "Cloud before projection: " << 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 a set of planar coefficients with X=Y=0,Z=1

pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());

coefficients->values.resize(4);

coefficients->values[0] = 0;

coefficients->values[1] = 0;

coefficients->values[2] = 1;

coefficients->values[3] = 0;

// Create the filtering object

pcl::ProjectInliers<pcl::PointXYZ> proj;//创建投影滤波对象

proj.setModelType(pcl::SACMODEL_PLANE);//设置对象对应的投影模型

proj.setInputCloud(cloud);//设置输入点云

proj.setModelCoefficients(coefficients);//设置模型对应的系数

proj.filter(*cloud_projected);//执行投影滤波存储结果cloud_projected

std::cerr << "Cloud after projection: " << std::endl;

for (size_t i = 0; i < cloud_projected->points.size(); ++i)

std::cerr << "    " << cloud_projected->points[i].x << " "

<< cloud_projected->points[i].y << " "

<< cloud_projected->points[i].z << std::endl;

getchar();

return 0;

}

输出结果截图

点云数据投影到平面上

有问题随时留言哦

扫一扫关注我们:

点云数据投影到平面上