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
Ubuntu12.04でGCC4.6.3でPCL1.6を使用しています。
何が悪いのか考えていますか?PCLユーザーのメーリングリストに質問しましたが、成功しませんでした。