2
Я пытаюсь скопировать десять двумерных точек с помощью kmeans OpenCV. Код выглядит следующим образом:opencv kmeans возвращает неверный результат
vector<Point2f>data(10);
data[0] = {118.90323, 1088.7419};
data[1] = {143.5, 1064.5};
data[2] = {110, 1054};
data[3] = {662, 645};
data[4] = {650, 625.5};
data[5] = {94, 363};
data[6] = {60, 360};
data[7] = {103.97369, 315.71054};
data[8] = {70.5, 313};
data[9] = {1466, 278.55554};
cout << "data:" << data << endl;
Mat labels;
int cluster_number = 4;
TermCriteria criteria = TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 40, 0.1);
Mat centers;
kmeans(data, cluster_number, labels, criteria, 1, KMEANS_RANDOM_CENTERS, centers);
cout << "centers:" << centers << endl;
cout << "labels:" << labels << endl;
Выход:
data:
[118.90323, 1088.7419; 143.5, 1064.5; 110, 1054; 662, 645; 650, 625.5; 94, 363; 60, 360; 103.97369, 315.71054; 70.5, 313; 1466, 278.55554]
centers:
[1.9113665e-38, 2.4802983e-43; 0, 0; 118.90323, 1088.7419; 0, 0]
labels:
[2; 0; 0; 0; 0; 0; 0; 0; 3; 1]
Это, очевидно, не так. Я хотел бы иметь этикетки
[0,0,0,1,1,2,2,2,2,3]
Большое спасибо за вашу помощь !!
Как установить данные? Это не показано в вашем коде. –
Привет, Андрей! Большое спасибо за ваш комментарий! Теперь я добавил инициализацию. Мне не удалось преобразовать данные вектора в другой формат, который работал с kmeans ... Как вы считаете, неправильный формат массива является причиной странных результатов? –