【发布时间】:2018-07-15 11:31:50
【问题描述】:
我在 Android Studio 中使用 opencv 来增加图像中的红色比例。但是当我运行该函数大约 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();
}
【问题讨论】:
-
每个
new调用都应该有对应的delete调用。注意release是另外一回事,它只会释放 Mat 的一些内部字段 -
@DmitriiZ。它是 Java,而不是 C++
-
我也是java和android的新手,我尝试在java中删除 Mat。但是java中OpenCV好像没有delete功能。
标签: android opencv memory-management out-of-memory