我假设你有点云
pcl::PointCloud<pcl::PointXYZRGB>
并且要将估计的曲面法线指定给点云的每个点。
将为输入点云的每个点估计曲面法线。所以曲面法线点云的大小等于输入点云的尺寸。
您可以创建另一个类型的点云
pcl::PointCloud<pcl::PointXYZRGBNormal>
其可以保存对应法线的信息以及点的位置和颜色。然后写一个
for
循环进行分配。
下面是它的代码片段:
pcl::PointCloud<pcl::PointXYZRGB>& src; // Already generated
pcl::PointCloud<pcl::PointXYZRGBNormal> dst; // To be created
// Initialization part
dst.width = src.width;
dst.height = src.height;
dst.is_dense = true;
dst.points.resize(dst.width * dst.height);
// Assignment part
for (int i = 0; i < cloud_normals->points.size(); i++)
{
dst.points[i].x = src.points[i].x;
dst.points[i].y = src.points[i].y;
dst.points[i].z = src.points[i].z;
dst.points[i].r = src.points[i].r;
dst.points[i].g = src.points[i].g;
dst.points[i].b = src.points[i].b;
// cloud_normals -> Which you have already have; generated using pcl example code
dst.points[i].curvature = cloud_normals->points[i].curvature;
dst.points[i].normal_x = cloud_normals->points[i].normal_x;
dst.points[i].normal_y = cloud_normals->points[i].normal_y;
dst.points[i].normal_z = cloud_normals->points[i].normal_z;
}
我希望这有帮助。