PCL截取ROI
输入一个点云区域,输入ROI的X,Y,Z值,确定ROI区域,单列一个显示的函数将ROI区域显示出来,X,Y,X的最大最小值写成定值。
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h> // 用于加载PCD文件
#include <pcl/visualization/pcl_visualizer.h> // 用于点云可视化// 显示指定ROI区域内的点云
void displayROI(const pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud,float x_min, float x_max,float y_min, float y_max,float z_min, float z_max) {// 创建一个新的点云对象来存储ROI内的点pcl::PointCloud<pcl::PointXYZ>::Ptr roi_cloud(new pcl::PointCloud<pcl::PointXYZ>());// 筛选符合ROI条件的点for (const auto& point : *cloud) {if (point.x >= x_min && point.x <= x_max &&point.y >= y_min && point.y <= y_max &&point.z >= z_min && point.z <= z_max) {roi_cloud->push_back(point); // 将符合条件的点添加到ROI点云中}}// 创建一个PCL可视化对象pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0); // 设置背景颜色为黑色viewer->addPointCloud<pcl::PointXYZ>(roi_cloud, "roi_cloud"); // 添加点云到可视化对象viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "roi_cloud"); // 设置点云大小viewer->addCoordinateSystem(1.0); // 添加坐标系viewer->initCameraParameters(); // 初始化相机参数// 启动可视化窗口while (!viewer->wasStopped()) {viewer->spinOnce(100); // 更新可视化窗口}
}int main() {// 加载点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());if (pcl::io::loadPCDFile<pcl::PointXYZ>("Surface.pcd", *cloud) == -1) { // 替换为你的点云文件路径PCL_ERROR("Couldn't read file\n"); // 输出错误信息return (-1);}// 定义ROI的边界值float x_min = 1539.59, x_max = 1573.81;float y_min = 284.274, y_max = 302.807;float z_min = -104.304, z_max = -92.674;// 调用函数显示ROI内的点云displayROI(cloud, x_min, x_max, y_min, y_max, z_min, z_max);return 0;
}
运行成功