Java 如何释放';从函数返回什么?
如果在一个函数中我创建了一个新的Mat,然后我返回了那个Mat,那个Mat对象什么时候会被释放 假设我有这个示例函数:Java 如何释放';从函数返回什么?,java,android,opencv,mat,Java,Android,Opencv,Mat,如果在一个函数中我创建了一个新的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,
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-filtered2和frameRGB。FrameRGB在函数结束时释放,但Filtered2返回,因此从未释放
如何释放过滤器2?还是在我归还垫子时自动释放?这是一个愚蠢的问题,但谢谢你塞尔文的快速回答 正如Selvin所说,只需释放调用的结果
result = sampleFunction(frameHSV)
result.release() // releases the Mat that was returned from the function
如果我错了,请纠正我,但
Mat
应在函数调用完成后自动释放。因为变量filtered2的生存期在函数调用后结束。?显然是这样的:matframehsv=newmat();Mat结果=采样功能(FRAMESHSV);使用(结果);frameHSV.release();result.release()代码>result.release()
将发布filtered2
作为result==filtered2
D'oh-我觉得很傻。出于某种原因,我没有意识到Mat只是要从函数中传递回来。谢谢你把它清理干净