我正在尝试生成 PCL 点云。我的所有观点都在以下容器类型中:
std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> >
我想创建一个指向 PCL 点云的指针:
pcl::PointCloud<pcl::PointXYZ>::Ptr pc
创建此点云的最有效方法是什么?
我正在尝试生成 PCL 点云。我的所有观点都在以下容器类型中:
std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> >
我想创建一个指向 PCL 点云的指针:
pcl::PointCloud<pcl::PointXYZ>::Ptr pc
创建此点云的最有效方法是什么?
由于 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 甚至交换(有点技巧)。
点云:
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);