Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV';中的参数'Distance d=Distance()'是什么;s层次聚类函数?_C++_Opencv - Fatal编程技术网

C++ OpenCV';中的参数'Distance d=Distance()'是什么;s层次聚类函数?

C++ OpenCV';中的参数'Distance d=Distance()'是什么;s层次聚类函数?,c++,opencv,C++,Opencv,我已经讨论了一些问题、源代码和其他示例,但我始终无法理解Distance d=Distance()参数在函数中的含义 在的评论中有提到,但我在任何地方都找不到距离类型。我已导入以下文件: #include "opencv2/contrib/contrib.hpp" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #incl

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

在的评论中有提到,但我在任何地方都找不到距离类型。我已导入以下文件:

#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"
我已检查了
cv
cvflann
cv::flann
名称空间,但找不到任何内容

这是我的密码:

int tmp = cv::flann::hierarchicalClustering<cv::L2<float>>(descriptors, centers, params, ______ );
int tmp=cv::flann::hierarchicalClustering(描述符、中心、参数等);
_uu uu显然是最后一个参数的位置。我尝试过类似于
cv::L2()
的方法,但也不起作用

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

我也试过:

int tmp = cv::flann::hierarchicalClustering<float, float>(descriptors, centers, params);
int tmp=cv::flann::hierarchycalclustering(描述符、中心、参数);
我得到的错误“没有重载函数的实例”cv::flann::hierachicalClustering与参数列表匹配

我正在使用OpenCV 2.4.11

有什么想法吗


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

参数
Distance d=Distance()
是设置距离算法的默认方法参数。通常,这将是
FLANN\u DIST\u L2
。为什么找不到
Distance
“类型“任何地方都是因为它实际上是一个
typename
。OpenCV选择使用C++专门化(通过模板)而不是继承来确保不同的距离函数具有相同的特性。
这是一个非平凡的主题,因此应该提供一个相当轻松的介绍。如果我能激起你的食欲,请看安德烈·亚历山德雷斯库的《种子》杂志。

添加这篇文章以供将来参考,因为我自己也在为OpenCV FLANN课程苦苦挣扎

这对我很有用:

// 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
//定义参数
cvflann::KMeansIndexParams kmeansParams kmeansParams(10100,cvflann::FLANN_CENTERS_KMEANSPP);
//注意这里的cvflann-不是cv::flann-名称空间
int nClusters=flann::hierarchycalclustering(样本、中心、kmeansParams);
//注意这里的常规flann名称空间
问题是marcman使用的是
而不是

flann名称空间非常混乱,而且缺少文档


由于模板的存在,在IDE中很难找到它。

太棒了,谢谢!这是一个很好的解释,我想花点时间看一下细节,但是,在短期内,有什么样的例子可以说明这一点?我尝试了
int tmp=cv::flann::hierarchycalclustering(描述符、中心、参数、cvflann::flann\u DIST\u L2)但不是luck@marcman:有关完整列表,请参见
defines.h
,您应该能够使用
FLANN_DIST_MANHATTAN
FLANN_DIST_L1
FLANN_DIST_MINKOWSKI
。我尝试了cvflann::FLANN_DIST_L2(我编辑了上述注释),但它仍然表示不受支持。很明显,法兰距离在那里是不合适的。@marcman:我没有设置OpenCV,所以我不能自己测试东西,但是读了一些,由于一些重构问题,似乎不可能设置不同的距离度量。类似于
flann::hierarchycalclustering
的方法是否有效?它不起作用。唉,我认为这个问题可能超过我的理解深度,只要C++(和PLS一般)就可以了。我将把这个问题留在这里,也许其他人已经解决了它,但在此期间,我将尝试一种不同的集群解决方案。谢谢你的帮助!