Creating a PCL point cloud using a container of Eigen Vector3d

試著忘記壹切 提交于 2019-11-30 17:08:59

问题


I am trying to generate a PCL point cloud. All my points are in the following container type:

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

I would like to create a pointer to a PCL point cloud:

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

What would be the most efficient way to create this point cloud?


回答1:


Since PCL seems to use a float[4] to store the points, when you specify pcl:PointXYZ, you will have to copy each element individually (not tested):

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

if you used a vector4d instead and ensured that the last coefficient of each element is 0, you could do a memcpy or even a swap (with a bit of trickery).




回答2:


Point Cloud:

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

Vector:

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

Push-back to add point clouds into a vector:

vectorOfPointCloud.push_back(*cloud);


来源:https://stackoverflow.com/questions/17129018/creating-a-pcl-point-cloud-using-a-container-of-eigen-vector3d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!