android - OpenCV-BackgroundSubtractorMOG2中的Apply方法在5-10秒后使Android应用程序崩溃

标签 android opencv

我正在开发一个Android application using OpenCV,必须在其中实现背景减法。我能够看到一些灰度框架和背景被删除,尽管它只持续一会儿,然后应用程序崩溃了。Technique used: BackgroundSubtractorMOG2
这是我的OnCameraFrame片段

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {


    Mat frame = inputFrame.rgba();
    Mat mRgb = new Mat();
    Mat mFGMask = new Mat();
    BackgroundSubtractorMOG2 mog2 = Video.createBackgroundSubtractorMOG2();

    Imgproc.cvtColor(frame, mRgb, Imgproc.COLOR_RGBA2RGB); 
    mog2.apply(mRgb, mFGMask); 
    Imgproc.cvtColor(mFGMask, frame, Imgproc.COLOR_GRAY2RGBA);

    return frame;
}

提前致谢。

最佳答案

我能够解决我的问题。
使用的新Mat()导致内存管理问题。必须在onCameraViewStarted中将其初始化一次,并且必须在onCameraViewStopped中释放返回的Mat。通过OpenCV社区按照建议修改代码后,我能够正确执行我的应用程序。
1.首先声明

private Mat mRgb;
private Mat mFGMask;
private Mat frame;
private BackgroundSubtractorMOG2 mog2;
  • 在onCameraViewStarted中初始化

    public void onCameraViewStarted(int width,int height){
    mRgb = new Mat();
    mFGMask = new Mat();
    mog2 = Video.createBackgroundSubtractorMOG2();
    

  • 在onCameraViewStopped中释放返回帧

    public void onCameraViewStopped(){
    frame.release();
    


  • 有关完整代码:https://github.com/rishirajrsawant/OpenCV-Background-Subtraction

    关于android - OpenCV-BackgroundSubtractorMOG2中的Apply方法在5-10秒后使Android应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61830052/

    相关文章:

    c++ - opencv c++ 匹配来自文件的描述符

    opencv - 为什么KeyPoint "detector"和 "extractor"是不同的操作?

    java - 在 Android 中将 Stream 转换为 String 时出现 OutOfMemoryError

    android - 尝试在 android 中流式传输 IP 摄像机时出现黑屏

    android - 获取 Android 日历事件的唯一 ID

    android - onNavigationItemSelected 没有被调用

    python - Knearest() 函数在 opencv 2.4.8 和 python 2.7.5 中不起作用

    android - 查找设备与图像目标的距离 - Vuforia 和 Unity?

    c++ - 检测卡片上的水滴并计算其数量和大小 OpenCV C++

    python - 如何使用 Python 用新图像替换图像中的轮廓(矩形)?