Грешка в OpenCV в Android: Недостатъчна памет (Неуспешно заделяне)

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

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

Търсих много свързани въпроси и много хора казват, че add 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, опитах се да изтрия Mat в java. Но изглежда, че няма функция за изтриване за OpenCV в java.   -  person Zhou Jundong    schedule 06.02.2018


Отговори (1)


Избягвайте да губите памет с новия Mat и принудете събирача на отпадъци преди края на метода

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