首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV的hierachicalClustering函数中的`Distance d= Distance()`参数是什么?

OpenCV的hierachicalClustering函数中的`Distance d= Distance()`参数是什么?
EN

Stack Overflow用户
提问于 2015-04-16 13:08:10
回答 2查看 802关注 0票数 2

我已经看过了问题、源代码和其他示例,但我始终无法理解Distance d = Distance()参数在函数中的含义

template int flann::hierarchicalClustering(const Mat& features, Mat& centers, const cvflann::KMeansIndexParams& params, Distance d=Distance())

它在this question的注释中被解决了,但是我在任何地方都找不到Distance类型。我已经导入了以下文件:

代码语言:javascript
复制
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/flann/flann.hpp"

我检查了cvcvflanncv::flann名称空间,但什么也找不到。

下面是我的代码:

代码语言:javascript
复制
int tmp = cv::flann::hierarchicalClustering<cv::L2<float>>(descriptors, centers, params, ______ );

___显然是最后一个参数所在的位置。我尝试过像cv::L2<float>()这样的东西,但也不起作用。

在源代码中,它看起来像一个模板。

我也尝试过:

代码语言:javascript
复制
int tmp = cv::flann::hierarchicalClustering<float, float>(descriptors, centers, params);

我得到错误“没有重载函数的实例"cv::flann::hierachicalClustering”匹配参数列表。参数类型是:(cv::Mat,cv::Mat,cv::KMeansIndexParams)。

我使用的是OpenCV 2.4.11。

有什么想法吗?

FLANN user manual中还有更多的文档。它看起来像是被逐字复制到OpenCV中的。

EN

回答 2

Stack Overflow用户

发布于 2015-04-16 13:47:34

参数Distance d = Distance()是设置距离算法的默认方法参数。通常,这将是FLANN_DIST_L2。在任何地方都找不到Distance“类型”的原因是因为它实际上是一个typename。OpenCV选择使用C++特殊化(通过模板)而不是继承,以确保不同的距离函数具有相同的特征。

这是一个很重要的主题,所以http://www.gotw.ca/publications/mxc++-item-4.htm应该提供一个相当简单的介绍。如果我激起了你的胃口,看看安德烈·亚历山大·雷斯库的开创性的Modern C++ Design

票数 2
EN

Stack Overflow用户

发布于 2016-04-04 21:43:43

添加这篇文章以供将来参考,因为我自己也在努力处理OpenCV FLANN类

这对我很有效:

代码语言:javascript
复制
// define parameters
cvflann::KMeansIndexParams kmeansParams(10, 100, cvflann::FLANN_CENTERS_KMEANSPP);
// note cvflann - not cv::flann - namespace there

int nClusters = flann::hierarchicalClustering<flann::L2<float>>(samples, centers, kmeansParams );
// note regular flann namespace here

问题是marcman使用的是<cv::L2<float>>而不是<flann::L2<float>>

flann名称空间非常令人困惑,而且缺乏文档

由于模板的原因,在IDE中很难弄清楚这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29665763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档