使用Eigen Vector3d容器创建PCL点云

时间:2013-06-15 23:55:32

标签: eigen point-cloud-library

我正在尝试生成PCL点云。我的所有积分都是以下容器类型:

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

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

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

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

2 个答案:

答案 0 :(得分:4)

由于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甚至交换(带有一些技巧)。

答案 1 :(得分:0)

点云:

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

矢量:

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

向后推,将点云添加到矢量中:

vectorOfPointCloud.push_back(*cloud);