将pcl点类型XYZ转换为特征向量4f

Lau*_*una 6 c++ eigenvector point-cloud-library

我正在尝试将pcl pointXYZ转换为特征向量

Eigen::Vector4f min (minPnt.x, minPnt.y, minPnt.z);  
Eigen::Vector4f max (maxPnt.x, maxPnt.y, maxPnt.z);
Run Code Online (Sandbox Code Playgroud)

其中minPnt和maxPnt的类型为pcl :: PointXYZ。但是,出现错误“错误C2338:THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE”。您能否建议其他方法或让我知道我的方法是否错误。

Ard*_*iya 8

请使用getVector4fMap()获取Eigen::Vector4f和使用getVector3fMap()获取Eigen::Vector3f

例子:

PointT pcl_pt = ...;
Eigen::Vector3f e_v3f_pt = pcl_pt.getVector3fMap();
Eigen::Vector4f e_v4f_pt = pcl_pt.getVector4fMap();
Run Code Online (Sandbox Code Playgroud)

如果你有的是一个pcl::Normal,你可以尝试使用getNormalVector4fMap如下所示

pcl::Normal pcl_normal(0, 0, 1);
Eigen::Vector4f eigen_normal = pcl_normal.getNormalVector4fMap();
Run Code Online (Sandbox Code Playgroud)


Lau*_*una 2

我用以下代码解决了上述问题。

auto x_min = static_cast<float>(minPnt.x); 
auto y_min = static_cast<float>(minPnt.y); 
auto z_min = static_cast<float>(minPnt.z); 

auto x_max = static_cast<float>(maxPnt.x); 
auto y_max = static_cast<float>(maxPnt.y); 
auto z_max = static_cast<float>(maxPnt.z); 

Eigen::Vector4f min(x_min, y_min, z_min, 0.0); 
Eigen::Vector4f max(x_max, y_max, z_max, 0.0); 
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法,请提出。