Как освободить мат, который возвращается из функции?
Если внутри функции я создаю новый 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
заканчивается после вызова функции.