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

11

我正在尝试将pcl的PointXYZ转换为eigen向量

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

minPnt和maxPnt的类型为pcl::PointXYZ。然而,我得到一个错误,显示"error C2338: THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE"。请问是否可以提供其他方法或者告知我的方法有何不对。

3个回答

11
请使用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();
如果您拥有的是 pcl::Normal,您可以尝试使用如下所示的getNormalVector4fMap
pcl::Normal pcl_normal(0, 0, 1);
Eigen::Vector4f eigen_normal = pcl_normal.getNormalVector4fMap();

2

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);

2
或者,如果您使用(x,y,z,w)坐标,则返回1。 - Epic Wink

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); 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接