#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>
#include <boost/thread/thread.hpp>
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("F:\\9.pcd", *cloud);
//设置平面模型系数,这里设置为X-Y平面(Z=0)
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
coefficients->values.resize(4); // 确保系数数组有4个元素
coefficients->values[0] = 0; // 设置平面系数 Y-Z
coefficients->values[1] = 0; // 设置平面系数 b,设置该参数就是投影到X-Z
coefficients->values[2] = 1.0; // 设置平面系数 c,投影到 X-Y 平面
coefficients->values[3] = 0; // 设置平面常数 d
// 创建投影滤波器对象
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType(pcl::SACMODEL_PLANE);// 设置模型类型为平面
proj.setInputCloud(cloud);// 设置输入点云
proj.setModelCoefficients(coefficients);// 设置平面模型系数
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);
proj.filter(*cloud_projected); // 将点云投影到平面上
// 保存投影后的点云
pcl::io::savePCDFileBinary("F:\\9999.pcd", *cloud_projected);
// 可视化原始点云和投影后的点云
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("Point Cloud Visualization"));
int vp1, vp2;
viewer->createViewPort(0.0, 0.0, 0.5, 1.0, vp1);// 左半部分视口
viewer->setBackgroundColor(0, 0, 0, vp1); // 设置视口背景为白色
viewer->addText("Original", 10, 10, "vp1_text", vp1);// 在视口中添加文本
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color(cloud, 255, 0, 0); // 设置点云颜色为红色
viewer->addPointCloud(cloud, cloud_color, "original_cloud", vp1);// 将原始点云添加到视口
viewer->createViewPort(0.5, 0.0, 1.0, 1.0, vp2);
viewer->setBackgroundColor(0, 0, 0, vp2); // 浅灰色背景
viewer->addText("Projected", 10, 10, "vp2_text", vp2);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> projected_color(cloud_projected, 0, 255, 0); // 绿色
viewer->addPointCloud(cloud_projected, projected_color, "projected_cloud", vp2);
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));// 线程休眠,避免占用过多CPU资源
}
return 0;
}
标签:PCL,14,viewer,projected,coefficients,pcl,点云,cloud
From: https://blog.csdn.net/qq_64095888/article/details/143677821