Как использовать get (int row, int cols) в java OpenCV, чтобы получить значения пикселей изображения циновки в градациях серого? - PullRequest
0 голосов
/ 21 мая 2019

Я создаю приложение для сканирования документов в Android Studio, чтобы продемонстрировать мой недавно предложенный алгоритм.Однако я столкнулся с проблемой при создании функции «maxFilter», которая должна возвращать максимальное значение каждого nxn-блока изображения.

Поскольку я совсем новичок в Android Studio, я попробовал ту же структуру кодирования, что иМедианный фильтр: конвертировать Mat в 1d массив> найти максимум в каждом окне и сохранить как массив> конвертировать 1d массив в Mat.

private Mat maxFilter(Mat src, int windowSize) {

    Mat max = new Mat();
    int size = (int) (src.total());
    double[] d = new double[size];
    double window[];

    for (int j = 0; j < src.rows(); j++){
        for (int i = 0; i < src.cols(); i++){
            window = new double [windowSize * windowSize];
            int count = 0;
            for (int r = j - (windowSize / 2); r <= j + (windowSize / 2); r++){
                for (int c = i - (windowSize / 2); c <= i + (windowSize / 2); c++) {
                    if (r < 0 || r >= src.rows() || c < 0 || c >= src.cols()) {
                        /** Some portion of the mask is outside the image. */
                        window[count] = 0;
                    } else {
                        window[count] = src.get(c, r)[0];
                    }
                    count++;
                }

            }
            java.util.Arrays.sort(window);
            d[i + j * src.cols()] = window[(windowSize*windowSize)-1];
        }
    }
    for(int j = 0; j < src.rows(); j++) {
        for (int i = 0; i < src.cols(); i++) {
            src.put(i, j, d[i + j * src.cols()]);
            Core.divide(src, new Scalar(255), max);
        }
    }
    return max;

}

В редакторе не отображается сообщение об ошибке, но при работе на реальных телефонахфатальное исключение показано в logcat.

java.lang.NullPointerException: попытка чтения из нулевого массива в com.myapps.documentscanner.ImageProcessor.maxFilter (ImageProcessor.java:382)

, который ссылается налиния window[count] = src.get(c, r)[0];

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