OpenCV4Android Kmean не работает должным образом
Этот код должен давать центры мат с 3 строками и кластеромCount количество столбцов
Mat reshaped_image = imageMat.reshape(1, imageMat.cols()*imageMat.rows());
Mat reshaped_image32f = new Mat();
reshaped_image.convertTo(reshaped_image32f, CvType.CV_32F, 1.0 / 255.0);
Mat labels = new Mat();
TermCriteria criteria = new TermCriteria(TermCriteria.COUNT, 100, 1);
Mat centers = new Mat();
int clusterCount = 5, attempts = 1;
Core.kmeans(reshaped_image32f, clusterCount, labels, criteria, attempts, Core.KMEANS_PP_CENTERS, centers);
Я попробовал тот же код на C и получил центры Mat с 3 строками и clusterCount числом столбцов.
Но в Java Core.kmeans возвращает 4 столбца и количество кластеров строк.
centers.reshape(3);
так что теперь функция изменения формы не работает на центрах, так как количество строк зависит от размера кластера. В C число строк всегда постоянное, т.е. 3.
так в Java это дает ошибку
количество строк матрицы не может быть разделено на новое количество строк
Может кто-нибудь разобраться в чем проблема. Я даже пыталсяэтот который похож на мой код и получил ту же ошибку.
Код ссылки C:
cv::Mat reshaped_image = image.reshape(1, image.cols * image.rows);
cv::Mat reshaped_image32f;
reshaped_image.convertTo(reshaped_image32f, CV_32FC1, 1.0 / 255.0);
cv::Mat labels;
int cluster_number = 5;
cv::TermCriteria criteria(cv::TermCriteria::COUNT, 100, 1);
cv::Mat centers;
cv::kmeans(reshaped_image32f, cluster_number, labels, criteria, 1, cv::KMEANS_PP_CENTERS, centers);