我正在尝试对一组4D vector 进行聚类,而不事先知道应该有多少个聚类。过去,在了解群集数量的情况下,我已经能够使用cvKmeans2进行群集。我正在浏览API,并遇到了 cv::flann::hierarchicalClustering
。看起来它将满足我的需要(即执行k均值,在必要时拆分簇,迭代直到拆分使结果恶化),但是我确实在为“索引参数”苦苦挣扎。
我发现我需要创建一个index structure作为第二个参数,但是我从以下代码中得到了一个错误:cv::flann::Index fln_idx = cv::flann::KMeansIndexParams::createIndex( framePoints );
错误是:../src/segmentation_1.cpp:592: error: cannot call member function ‘virtual flann::Index* cv::flann::KMeansIndexParams::createIndex(const cv::Mat&) const’ without object
framePoints
定义如下:CvMat *framePoints = cvCreateMat( frameTracklets.size( ), 4, CV_32FC1 );
我相当确定我做的事很愚蠢(我的C++知识还可以,但不是很好)。我想我已经发布了所有相关的代码,但是如果没有,请告诉我,我将发布更多。
提前致谢!
更新
我遵循LumpN的建议,并使用以下命令创建了一个Kmeans对象:
cv::Mat centres;
cv::flann::KMeansIndexParams fln_idx = cv::flann::KMeansIndexParams();
fln_idx.createIndex( framePoints );
int numClust;
numClust = hierarchicalClustering(framePoints, centres, fln_idx);
现在,当我运行它时,我从
hierarchicalClustering()
收到一条错误消息,内容为“所需集群的数量应为>= 1
”(我需要检查何时开始工作,然后使用实际错误进行更新)。我以为createIndex()
给了它起点,然后hierarchicalClustering()
分裂成簇直到找到一个好的结果(不确定这是否最佳)。我需要使用一些参数来调用cv::flann::KMeansIndexParams()
吗?我看了一下api,感到非常困惑!再次感谢!
最佳答案
您必须传递对createIndex
的引用,即createIndex(*framePoints)
(请注意星号!)。另一个错误可能是createIndex
是非静态(成员)函数。在这种情况下,您必须创建一个KMeansIndexParams
对象,并在该对象上调用createIndex
。
关于c++ - 不了解 “k”的OpenCV中的分层k均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5461357/