将 pcl::P ointCloud 转换为 Eigen::MatrixBase
Converting pcl::PointCloud to Eigen::MatrixBase
>我正在尝试从此标头运行ICP算法。行:260 处的函数的声明为
template <typename Derived1, typename Derived2>
void point_to_point(Eigen::MatrixBase<Derived1>& X,
Eigen::MatrixBase<Derived2>& Y,
Parameters par = Parameters()) {
我想在我的两个pcl::PointCloud
上应用这个算法,但它接受Eigen::MatrixBase
.我尝试按如下方式调用此函数
Eigen::MatrixBase<Eigen::Matrix<double,3,1,Eigen::RowMajor,3,100>> X;
Eigen::MatrixBase<Eigen::Matrix<double,3,1,Eigen::RowMajor,3,100>> Y;
Parameters par = Parameters()
point_to_point(X,Y,Parameters)
它给了我这个错误
error: ‘Eigen::MatrixBase<Derived>::MatrixBase() [with Derived = Eigen::Matrix<double, 3, 1, 1, 3, 100>]’ is protected
MatrixBase() : Base() {}
我也尝试了Eigen::MatrixBase<Eigen::Matrix4f> X;
但每种类型似乎都受到保护。这到底是什么意思?
我搜索了很多,但没有找到任何MatrixBase
的例子。
- 如何在
Eigen::MatrixBase
中插入/删除值 - 在这里找不到任何此类功能? - 如何将
pcl::PointCloud
转换为Eigen::MatrixBase
和反转? - 如何调用此函数?
您可以使用
for 循环构造矩阵。例如
Eigen::Matrix3Xd X, Y;
for (size_t idx = 0; idx != pc_X->size(); ++idx) {
X.col(idx) = Eigen::Vector3d{pc_X->at(idx).x,
pc_X->at(idx).y,
pc_X->at(idx).z};
}
for (size_t idx = 0; idx != pc_Y->size(); ++idx) {
Y.col(idx) = Eigen::Vector3d{pc_Y->at(idx).x, pc_Y->at(idx).y, pc_Y->at(idx).z};
}
相关文章:
- C++:如何将 std::vector 操作转换为 Eigen::VectorXf?
- 将 Eigen::MatrixXd 转换为 arma::mat 并在新对象上制作副本
- 将 Eigen::MatrixXd 矩阵转换为 cgal 容器类型
- Eigen::将稀疏矩阵转换为行顺序或列顺序
- 将eigen :: sparsematrix转换为cusparse,反之亦然
- 将 Eigen::TensorMap 转换为 Eigen::Tensor
- 将 Eigen::P ermutationMatrix.indices() 转换为 array/vector
- 将eigen :: arrayxxd转换为eigen :: matrixxd
- c++ lambda 函数,用于将 Eigen::VectorXd 转换为 Eigen::MatrixXd
- 在 Eigen::Matrix 中转换 dolfin::Matrix
- 将双[]转换为eigen :: matrix4d
- C :如何将std ::向量转换为eigen :: matrixxd
- 将PCL点类型XYZ转换为EIGEN VECTOR 4F
- 从 Eigen::CwiseBinaryOp 转换为 MatrixXd 会导致段错误
- 将 pcl::P ointCloud 转换为 Eigen::MatrixBase
- 将 Eigen::matrixXd 转换为 Double
- 将Eigen::VectorXd类型转换为std::vector
- Euler到四元数的转换PCL+Eigen
- 无法从'const Eigen::GeneralProduct<Lhs,Rhs,ProductType>'转换为'double'
- 将cv::Mat之间的矩阵转换为Eigen:: matrix和