天天看點

點雲資料投影到平面上

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

}

輸出結果截圖

點雲資料投影到平面上

有問題随時留言哦

掃一掃關注我們:

點雲資料投影到平面上