在OpenCV for Android中使用Vector <mat>或List <mat>时,应用程序停止</mat> </mat>

时间:2013-11-09 20:36:42

标签: android list opencv vector split

我正在将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时如何清理内存?

谢谢

2 个答案:

答案 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();


}