Reputation: 79
when I try to use kmeans as such:
int K = 4;
Mat labels;
Mat centers;
std::vector<float> values;
// (put a bunch of values into "values" here...)
kmeans(values, K, labels, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10, 1.0), 10, KMEANS_PP_CENTERS, centers);
I get the error: "error: (-215) N >= K in function kmeans"
values.size() = 360000, so N is clearly greater than K. What gives? Thanks.
Upvotes: 0
Views: 4207
Reputation: 23
I faced the same problem.
This worked for me. Converted vector to Mat.
int K = 4;
Mat labels;
Mat centers;
std::vector<float> values;
Mat points=Mat(values,true);
points.convertTo(points, CV_32F);
kmeans(points, K, labels, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10, 1.0), 10, KMEANS_PP_CENTERS, centers);
Upvotes: 0
Reputation: 30122
OpenCV weirdly interprets one-dimensional data as a 1 element array.
Something like following should fix the behavior:
kmeans(cv::Mat(values).reshape(1, values.size()), K, labels, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10, 1.0), 10, KMEANS_PP_CENTERS, centers);
Upvotes: 3