Ошибка OpenCV в Android: недостаточно памяти (не удалось выделить)

Я использую opencv в Android Studio, чтобы увеличить долю красного цвета в изображении. Но когда я запускаю функцию примерно через 30 раз, программа вылетает и показывает ошибку.

OpenCV Error: Insufficient memory(Failed to allocate *****bytes)

Я просмотрел много связанных вопросов, и многие люди говорят, что добавление Mat.release () может решить эту проблему. Я добавил Mat.release в свою функцию, но это не помогает. Программа по-прежнему вылетает после того, как я запустил ее более 30 раз.

Вот мой код. Кто-нибудь знает, как решить эту проблему?

public void addRedColor(int red){

Mat img = new Mat();
Utils.bitmapToMat(src, img);

List<Mat> bitplane = new ArrayList<>(img.channels());
Core.split(img, bitplanes);
Mat redChannel = new Mat();
Core.add(bitplane.get(0), new Scalar(red), redChannel);
bitplane.set(0, redChannel);
Core.merge(bitplane, img);

// release the Mat
img.release();
bitplane.get(0).release();
bitplane.get(1).release();
bitplane.get(2).release();
redChannel.release();

}

person Zhou Jundong    schedule 05.02.2018    source источник
comment
Каждый вызов new должен иметь соответствующий вызов delete. Обратите внимание, что release - это другое дело и освобождает только некоторые внутренние поля Mat.   -  person Dmitrii Z.    schedule 05.02.2018
comment
@DmitriiZ. это Java, а не C ++   -  person Miki    schedule 05.02.2018
comment
Я тоже новичок в java и android, пробовал удалить коврик в java. Но похоже, что в java нет функции удаления для OpenCV.   -  person Zhou Jundong    schedule 06.02.2018


Ответы (1)


Избегайте тратить память на новый Mat и принудительно запускайте сборщик мусора до завершения метода

    System.gc();
    System.runFinalization();
person aorlando    schedule 11.10.2018