gpt4 book ai didi

c++ - OpenCV层次聚类函数中的参数 `Distance d = Distance()`是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:10 24 4
gpt4 key购买 nike

我已经检查了问题、源代码和其他示例,但我终究无法理解 Distance d = Distance() 是什么。参数在函数中的意思

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

它在 this question 的评论中得到解决。 ,但我无法在任何地方找到 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, ______ );

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

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

我也试过:

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 中。

最佳答案

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

这是一个不平凡的主题,所以 http://www.gotw.ca/publications/mxc++-item-4.htm应该提供一个相当轻松的介绍。如果我激起了你的胃口,请查看 Andrei Alexandrescu 的开创性著作 Modern C++ Design .

关于c++ - OpenCV层次聚类函数中的参数 `Distance d = Distance()`是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29665763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com