0

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

谢谢

4

2 回答 2

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);

于 2014-02-01T06:30:32.377 回答
0

您需要将变量 Mat 初始化为函数“onCameraViewStarted”

public void onCameraViewStarted(int width, int height) {

    mRgba = new Mat();
    r = new Mat();
    g = new Mat();
    b = new Mat();


}
于 2018-12-14T21:31:29.470 回答