Я создаю приложение для сканирования документов в 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];