Моя конечная цель - очень эффективно преобразовать облако точек pcl::PointCloud<pcl::PointXYZ>
в std::vector<Eigen::Vector3f>
.Функция getMatrixXfMap()
( ссылка ) позволяет мне преобразовать Облако точек в Eigen::MatrixXf
.
Как теперь можно преобразовать Eigen::MatrixXf
в std::vector<Eigen::Vector3f>
?(или если вы знаете прямой метод перехода от pcl::PointCloud<pcl::PointXYZ>
к std::vector<Eigen::Vector3f>
, который также работает для меня)
Этот ответ является совершенно противоположным
ОБНОВЛЕНИЕ: это то, что я до сих пор (это работает, но это медленнее, чем итерация по всем пунктам).Я использую удвоение в этом случае, но любое решение без приведения удвоения также работает для меня:
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;
Спасибо