Clustering
kmeans
Finds centers of clusters and groups input samples around the clusters.

C++: double kmeans(InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray() )

Python: cv2.kmeans(data, K, bestLabels, criteria, attempts, flags[, centers]) → retval, bestLabels, centers

C: int cvKMeans2(const CvArr* samples, int cluster_count, CvArr* labels, CvTermCriteria termcrit, int attempts=1, CvRNG* rng=0, int flags=0, CvArr* _centers=0, double* compactness=0 )

The function kmeans implements a kmeans algorithm that finds the
centers of cluster_count clusters and groups the input samples
around the clusters. As an output,
contains a 0based cluster index for
the sample stored in the
row of the samples matrix.
The function returns the compactness measure that is computed as
after every attempt. The best (minimum) value is chosen and the
corresponding labels and the compactness value are returned by the function.
Basically, you can use only the core of the function, set the number of
attempts to 1, initialize labels each time using a custom algorithm, pass them with the
( flags = KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best (mostcompact) clustering.
Note
 An example on Kmeans clustering can be found at opencv_source_code/samples/cpp/kmeans.cpp
 (Python) An example on Kmeans clustering can be found at opencv_source_code/samples/python2/kmeans.py
partition
Splits an element set into equivalency classes.

C++: template<typename _Tp, class _EqPredicate> int partition(const vector<_Tp>& vec, vector<int>& labels, _EqPredicate predicate=_EqPredicate())
Parameters: 
 vec – Set of elements stored as a vector.
 labels – Output vector of labels. It contains as many elements as vec. Each label labels[i] is a 0based cluster index of vec[i] .
 predicate – Equivalence predicate (pointer to a boolean function of two arguments or an instance of the class that has the method bool operator()(const _Tp& a, const _Tp& b) ). The predicate returns true when the elements are certainly in the same class, and returns false if they may or may not be in the same class.

The generic function partition implements an
algorithm for
splitting a set of
elements into one or more equivalency classes, as described in
http://en.wikipedia.org/wiki/Disjointset_data_structure
. The function
returns the number of equivalency classes.
[Arthur2007]  Arthur and S. Vassilvitskii. kmeans++: the advantages of careful seeding, Proceedings of the eighteenth annual ACMSIAM symposium on Discrete algorithms, 2007 
Help and Feedback
You did not find what you were looking for?
 Ask a question on the Q&A forum.
 If you think something is missing or wrong in the documentation,
please file a bug report.