PCL-基于四个坐标点选择ROI区域
- 一、项目背景
- 二、代码实现
- 三、效果演示
- 四、相关链接
点云数据由大量空间中的三维点组成,这些点包含了物体的形状、位置和表面信息。在本文中,我们将介绍如何使用PCL中的CropBox函数来加载、裁剪和可视化点云数据,具体的,提前在CC中选择好 四个坐标点,并提前设置好ROI区域的高度,然后在原点云中裁剪出立体框,即ROI区域。
一、项目背景
假设我们有一个机器人卸货的应用场景,需要对一组砖块的点云数据进行处理。我们的目标是从原始点云数据中裁剪出一个特定区域,以便进行后续的分析或处理。
二、代码实现
头文件如下:
#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/crop_box.h>
#include <Eigen/Dense>
#include <pcl/visualization/cloud_viewer.h>
1. 创建点云对象并加载数据
首先,我们需要创建一个新的点云对象,并加载存储在文件系统中的点云数据。
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("***.pcd", *cloud) == -1) {PCL_ERROR("Couldn't read file input.pcd \n");return -1;
}
这里,我们使用pcl::io::loadPCDFile函数从指定路径加载点云数据。如果文件读取失败,程序将输出错误信息并返回。
2. 定义裁剪区域的四个点
接下来,我们定义了四个点来定义一个裁剪区域。这四个点将形成一个矩形平面,用于裁剪点云数据。
Eigen::Vector3f point1(***, ****, ****); //右上
Eigen::Vector3f point2(***, ****, ****); //左上
Eigen::Vector3f point3(***, ****, ****); //右下
Eigen::Vector3f point4(***, ****, ****); //左下
3. 计算裁剪平面的法向量和方程
为了裁剪点云,我们需要定义一个平面。这个平面由上面定义的四个点确定。我们首先计算平面的法向量,然后计算平面方程的参数。
// 计算平面的法向量
Eigen::Vector3f normal = (point2 - point1).cross(point3 - point1).normalized();
// 设定平面方程的d
float d = -normal.dot(point1);
4. 设置裁剪框并裁剪点云
在PCL中,pcl::CropBox类用于裁剪点云数据。我们根据定义的四个点设置裁剪框的范围,并执行裁剪操作。
pcl::CropBox<pcl::PointXYZ> crop_box;Eigen::Vector4f min_point, max_point;
min_point << std::min({ point1[0], point2[0], point3[0], point4[0] }),std::min({ point1[1], point2[1], point3[1], point4[1] }),0, 1;max_point << std::max({ point1[0], point2[0], point3[0], point4[0] }),std::max({ point1[1], point2[1], point3[1], point4[1] }),1380, 1;crop_box.setMin(min_point);
crop_box.setMax(max_point);
crop_box.setInputCloud(cloud);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_cropped(new pcl::PointCloud<pcl::PointXYZ>);
crop_box.filter(*cloud_cropped);
5. 可视化裁剪后的点云
最后,我们使用PCL的可视化工具来显示裁剪后的点云数据。
pcl::visualization::CloudViewer viewer("Cloud Viewer");
viewer.showCloud(cloud_cropped);while (!viewer.wasStopped()) {// 你可以在这里对点云做很多处理
}
三、效果演示
四、相关链接
PCL交互选择ROI区域