我正在将OpenCV库用于Android项目。问题是,当我想将图像分成3个通道时(我只想使用绿色通道),我声明List<Mat>
以便使用split()
方法:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
input = inputFrame.rgba();
Vector<Mat> channels = new Vector<Mat>(3);
Core.split(input, channels);
canny = channels.get(1);
/*
other code
*/
return canny;
}
问题是在20-30秒内(取决于相机分辨率)我的手机内存不足并关闭应用程序。每次调用onCameraFrame
时如何清理内存?
谢谢
答案 0 :(得分:2)
我遇到了与Java版本相同的问题,因此它似乎是cv :: split()包装器中的一个错误。我现在使用Core.extractChannel()用于相同的目的,并且没有内存泄漏。
Mat rgba = inputFrame.rgba();
Mat yuv = new Mat();
Imgproc.cvtColor(rgba, yuv, Imgproc.COLOR_RGB2YCrCb);
Mat y = new Mat();
Core.extractChannel(yuv, y, 0);
Mat u = new Mat();
Core.extractChannel(yuv, u, 1);
Mat v = new Mat();
Core.extractChannel(yuv, v, 2);
HTH!
答案 1 :(得分:0)
您需要将变量Mat初始化为函数“ onCameraViewStarted”
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat();
r = new Mat();
g = new Mat();
b = new Mat();
}