使用Vector时应用程序停止<;Mat>;或列表<;Mat>;在Android的OpenCV中
我正在为一个Android项目使用OpenCV库。问题是,当我想将图像分成3个通道(我只想使用绿色通道)时,我声明了一个使用Vector时应用程序停止<;Mat>;或列表<;Mat>;在Android的OpenCV中,android,list,opencv,vector,split,Android,List,Opencv,Vector,Split,我正在为一个Android项目使用OpenCV库。问题是,当我想将图像分成3个通道(我只想使用绿色通道)时,我声明了一个List,以便使用split()方法: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { input = inputFrame.rgba(); Vector<Mat> channels = new Vector<Mat>(3); Core.split(in
List
,以便使用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;
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame){
input=inputFrame.rgba();
向量通道=新向量(3);
核心。拆分(输入、通道);
canny=channels.get(1);
/*
其他代码
*/
回归精明;
}
问题是,在20-30秒内(取决于摄像头的分辨率),我的手机内存耗尽并关闭应用程序。如何在每次调用onCameraFrame
时清理内存
谢谢我在Java版本中遇到了同样的问题,所以它似乎是cv::split()包装中的一个bug。我现在使用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);
嗯 您需要将变量Mat初始化为函数“onCameraViewStarted”
欢迎来到堆栈溢出。请将您的回答限制为实际提供问题答案的回答。对附加信息的评论或请求应仅限于评论,而不是回答。正确回答一两个问题,你就应该有足够的声誉,可以不受限制地发表评论。
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat();
r = new Mat();
g = new Mat();
b = new Mat();
}