Применение .reshape () на моем матовом изображении приводит к сбою приложения и не отображает изображение (opencv java) - PullRequest
0 голосов
/ 24 апреля 2019

Я делаю метод в Android Studio, который реализует кластеризацию Kmeans на изображении. Часть процесса заключается в изменении изображения мата следующим образом

    img.reshape(1, img.rows()* img.cols()) 

и преобразование изображения в CV_32F. Когда я пытаюсь отобразить изображение, мое приложение вылетает.

После нескольких минут, пытаясь выяснить, в чем дело, я обнаружил, что img.reshape () является причиной сбоя по неизвестным причинам. Я пытался исследовать это, но я видел только пару ответов, где они сказали, что мне просто нужно преобразовать изображение обратно в исходную форму, выполнив:

    img.convertTo(img, CV_U8)
    img.reshape(3, img.rows());

, но это все равно приводит к сбою моего приложения и не отображает изображение циновки в ImageView.

Вот полный код:

    public Bitmap kmeans(Bitmap bitmap){

    int K = 8;
    int maxIterations = 10;
    Mat img = new Mat();
    Utils.bitmapToMat(bitmap, img);

    Mat m = img.reshape(1, img.rows() *img.cols());
    m.convertTo(m, CvType.CV_32F);



    Mat bestLabels = new Mat(m.rows(), 1, CV_8U);
    Mat centroids = new Mat(K, 1, CvType.CV_32F);
    Core.kmeans(m, K, bestLabels,
            new TermCriteria(TermCriteria.COUNT | TermCriteria.EPS, maxIterations, 1E-5),
            1, Core.KMEANS_RANDOM_CENTERS, centroids);


    List<Integer> idx = new ArrayList<>(m.rows());
    Converters.Mat_to_vector_int(bestLabels, idx);

    Mat imgMapped = new Mat(m.size(), m.type());
    for(int i = 0; i < idx.size(); i++) {
        Mat row = imgMapped.row(i);
        centroids.row(idx.get(i)).copyTo(row);
    }




    Mat output_image = imgMapped.reshape(3, img.rows());
    output_image.convertTo(output_image,CV_8U);



    Utils.matToBitmap(output_image, bitmap);

    return bitmap;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...