使用pcl自定义一个描述符,并使用KdTreeFLANN类寻找最邻近描述符,遇到以下问题:
自定义描述符如下:
struct VATDShapeContext363
{
float histogram[363];
static int descriptorSize() { return 363; }
};
出现如下错误:
LNK2019: 无法解析的外部符号 "public: __cdecl pcl::KdTreeFLANN<struct pcl::VATDShapeContext363,struct flann::L2_Simple<float> >::KdTreeFLANN<struct pcl::VATDShapeContext363,struct flann::L2_Simple<float> >(bool)"
直接使用pcl内定义的描述符如:FPFHSignature33、VFHSignature308、SHOT1344、UniqueShapeContext1960等都没问题。
(估计自定义点类型也会遇到相似的问题,包括直接使用pcl自定义的直方图Histogram)
标签:pcl histogram KdTree
解决方案:属性》预处理器》添加:PCL_NO_PRECOMPILE
最为重要的是要添加以下代码,使得pcl的FLANN能够识别自定义的点类(或描述符)
template <>
class DefaultPointRepresentation <VATDShapeContext363> : public PointRepresentation <VATDShapeContext363>
{
public:
DefaultPointRepresentation()
{
nr_dimensions_ = 363;
trivial_ = false;
}
virtual void
copyToFloatArray(const VATDShapeContext363 &p, float * out) const
{
for (int i = 0; i < nr_dimensions_; ++i)
out[i] = p.histogram[i];
}
};
写法参考:point_representation.h文件