我的最终目标是非常高效地将点云pcl::PointCloud<pcl::PointXYZ>
转换为std::vector<Eigen::Vector3f>
。
函数getMatrixXfMap()
(link)使我可以将点云转换为Eigen::MatrixXf
。
现在如何将Eigen::MatrixXf
转换为std::vector<Eigen::Vector3f>
? (或者,如果您知道从pcl::PointCloud<pcl::PointXYZ>
转到std::vector<Eigen::Vector3f>
的直接方法也对我有用)
This的答案恰恰相反
更新:这是我到目前为止所拥有的(它可以工作,但是比遍历所有要点要慢)。在这种情况下,我要强制转换成两倍,但是任何不强制转换成双倍的解决方案也对我有用:
pcl::PointCloud<pcl::PointXYZ>::Ptr pclptr_map_;
// Do stuff
Eigen::MatrixXd mat = (pclptr_map_->getMatrixXfMap()).cast<double>();
int cols = pclptr_map_->points.size();
std::vector<Eigen::Vector3d> v(pclptr_map_->points.size());
Eigen::Matrix<double, 3, Eigen::Dynamic>::Map(v.data()->data(), 3, cols) = mat;
谢谢