OpenCV4Android Kmean funktioniert nicht wie erwartet

Dieser Code sollte Zentren mit 3 Zeilen und clusterCount Spaltenanzahl mattieren.

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

Ich habe den gleichen Code in C ausprobiert und Center Mat mit 3 Zeilen und clusterCount Spaltenanzahl erhalten.

Aber in Java gibt die Datei Core.km 4 Spalten und eine Clusteranzahl von Zeilen zurück.

centers.reshape(3);

so jetzt funktioniert die Umformungsfunktion nicht in Zentren, da die Anzahl der Zeilen von der Clustergröße abhängt. In C ist die Anzahl der Zeilen immer konstant, d.

so in Java gibt es Fehler

die Anzahl der Zeilen der Matrix kann nicht durch die neue Anzahl der Zeilen geteilt werden

Kann jemand herausfinden, was das Problem ist. Ich habe sogar versucht,Die, das meinem Code ähnelt und denselben Fehler aufweist.

Referenz C-Code:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage