點雲數據投影到平面上

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

}

輸出結果截圖

有問題隨時留言哦

掃一掃關注我們:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章