我正在开发一个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;
public void onCameraViewStarted(int width,int height){
mRgb = new Mat();
mFGMask = new Mat();
mog2 = Video.createBackgroundSubtractorMOG2();
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/