将pcl点类型XYZ转换为Eigen Vector 4f

时间:2015-05-18 12:25:56

标签: c++ point-cloud-library eigenvector

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

Eigen::Vector4f min (minPnt.x, minPnt.y, minPnt.z);  
Eigen::Vector4f max (maxPnt.x, maxPnt.y, maxPnt.z);

其中minPnt和maxPnt的类型为pcl :: PointXYZ。 但是,我得到一个错误"错误C2338:THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE" 。你能否提出一些其他方法,或者让我知道我的方法是否错误。

3 个答案:

答案 0 :(得分:3)

请使用getVector4fMap()获取Eigen::Vector4f,然后使用getVector3fMap()获取Eigen::Vector3f

Eigen::Vector3f min = minPnt.getVector4fMap();
Eigen::Vector3f max = maxPnt.getVector4fMap();

如果需要转换法线,请使用

pcl::Normal pcl_normal(0, 0, 1);
Eigen::Vector3f eigen_normal = pcl_normal.getNormalVector4fMap();

答案 1 :(得分: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); 

如果有更好的方法,请建议。

答案 2 :(得分:1)

eigen :: vector4f正在寻找4个浮点数,但你只给它3个(x,y,z)。尝试在最后添加0:

Eigen :: Vector4f min(minPnt.x,minPnt.y,minPnt.z,0);
Eigen :: Vector4f max(maxPnt.x,maxPnt.y,maxPnt.z,0);