我想用 PCL 计算各种特征。我的想法是创建一个程序,根据命令行上给出的内容(类的名称及其参数)创建功能,计算它们并将它们写入文件中。
因此,我需要一些创建“通用”功能的代码。PCL 功能是模板类。必须使用输入类型(您要计算它们的数据类型)和输出类型来实例化它们。输入类型通常是pcl::PointCloud
所以我认为这不是问题。对于输出,我将Eigen::MatrixXf
其用作“通用”输出类型。但是我有一些奇怪的错误。
我写了一个最小的例子(它使用了一些typedef
以便更容易修改):
#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/fpfh.h>
typedef pcl::PointXYZ Input_T;
//#define USE_EIGEN
#ifdef USE_EIGEN
#warning "USING EIGEN"
typedef Eigen::MatrixXf Output_T;
#else
typedef pcl::PointNormal Output_T;
#endif
int main()
{
pcl::Feature<Input_T, Output_T>* q = new pcl::NormalEstimation<Input_T, Output_T>;
}
如果您“按原样”编译它,它应该可以工作。如果您取消注释第 7 行,它将不再起作用。GCC给出的错误是:
tmp/test.cc:16:49: erreur: cannot convert ‘pcl::NormalEstimation<pcl::PointXYZ, Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001> >*’ to ‘pcl::Feature<pcl::PointXYZ, Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001> >*’ in initialization
我在 Ubuntu 12.04 下使用 PCL 1.6 和 GCC 4.6.3。
知道出了什么问题吗?我已经询问了 PCL 用户邮件列表,但没有成功。