使用Eigen Vector3d容器创建PCL点云。

问题描述 投票:6回答:2

我正试图生成一个PCL点云。我所有的点都在下面的容器类型中,我想创建一个指向PCL点云的指针。

std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> >

我想创建一个指向PCL点云的指针。

pcl::PointCloud<pcl::PointXYZ>::Ptr pc 

创建这个点云最有效的方法是什么?

eigen point-cloud-library
2个回答
5
投票

由于PCL似乎使用float[4]来存储点,当你指定pcl:PointXYZ时,你将不得不单独复制每个元素(未测试)。

pc->points.resize( v.size() );
for(size_t i=0; i<v.size(); ++i)
    pc->points[i].getVector3fMap() = v[i].cast<float>();

如果你用一个vector4d来代替,并确保每个元素的最后一个系数是0,你可以做一个memcpy或者甚至是交换(用一点技巧)。


0
投票

点云。

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

Vector:

std::vector<pcl::PointCloud<pcl::PointXYZ>, Eigen::aligned_allocator<pcl::PointXYZ> > vectorOfPointCloud;

推回式将点云添加到一个矢量中。

vectorOfPointCloud.push_back(*cloud);
© www.soinside.com 2019 - 2024. All rights reserved.