Как освободить мат, который возвращается из функции?

Если внутри функции я создаю новый Mat, а затем возвращаю этот Mat, когда этот объект Mat когда-либо выпускается?

Скажем, у меня есть эта функция образца:

    Mat sampleFunction(Mat frameHSV) {
    Mat filtered2 = new Mat();  // create a new Mat object 
    Mat frameRGB = new Mat();    // create a new Mat object
    Imgproc.cvtColor(frameHSV, frameRGB, Imgproc.COLOR_HSV2RGB); // convert to RGB

    Core.subtract(frameRGB, frameHSV, filtered2); // subtract Mats, just a made up operation here
    frameRGB.release(); // release the RGB mat to clear up memory
    return filtered2;
    }

Итак, я передаю frameHSV, затем я создаю два Mats внутри образца Function-Filter2 и FrameRGB. FrameRGB освобождается в конце функции, но Filtered2 возвращается и поэтому никогда не освобождается.

Как мне выпустить Filter2? Или когда я возвращаю коврик, автоматическая разблокировка?

2 ответа

Решение

Глупый вопрос, но спасибо Селвину за быстрый ответ.

Как сказал Селвин, просто выпустите результат, который называется

  result = sampleFunction(frameHSV)
  result.release()  // releases the Mat that was returned from the function

Поправьте меня если я не прав но Mat должен быть освобожден автоматически после завершения вызова функции. Так как время жизни переменной filtered2 заканчивается после вызова функции.

Другие вопросы по тегам