当我尝试使用kmeans时:
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);
我收到错误:“错误:(-215)N&gt; = K函数kmeans”
values.size()= 360000,所以N显然大于K.是什么给出的?感谢。
答案 0 :(得分:3)
OpenCV奇怪地将一维数据解释为1元素数组。
以下内容应该可以修复行为:
kmeans(cv::Mat(values).reshape(1, values.size()), K, labels, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10, 1.0), 10, KMEANS_PP_CENTERS, centers);
答案 1 :(得分:0)
我遇到了同样的问题。
这对我有用。 将矢量转换为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);