O OpenCV4Android Kmean não funciona conforme o esperado

Esse código deve fornecer aos centros um tapete com 3 linhas e um número de colunas clusterCount

    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);

Eu tentei o mesmo código em C e tenho centros Mat com 3 linhas e número clusterCount de colunas.

Mas em java o Core.kmeans retorna 4 colunas e número de linhas do cluster.

centers.reshape(3);

agora a função remodelar não funciona em centros, pois o número de linhas depende do tamanho do cluster. Em C, o número de linhas é sempre constante, ou seja, 3.

então em java dá erro

o número de linhas da matriz não pode ser dividido pelo novo número de linhas

Alguém pode descobrir qual é o problema. Eu até tenteiesta que é semelhante ao meu código e tem o mesmo erro.

Código C de referência:

    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);

questionAnswers(1)

yourAnswerToTheQuestion