java - error in apply method in Background subtraction in opencv android -
i want background subtraction on inputframe, , want return foreground mask. facing error bellow can 1 me fix in advance
my code:
package org.opencv.samples.tutorial1; import org.opencv.android.baseloadercallback; import org.opencv.android.camerabridgeviewbase.cvcameraviewframe; import org.opencv.android.loadercallbackinterface; import org.opencv.android.opencvloader; import org.opencv.core.mat; import org.opencv.core.point; import org.opencv.core.scalar; import org.opencv.video.backgroundsubtractormog; import org.opencv.android.camerabridgeviewbase; import org.opencv.android.camerabridgeviewbase.cvcameraviewlistener2; import android.app.activity; import android.os.bundle; import android.util.log; import android.view.menu; import android.view.menuitem; import android.view.surfaceview; import android.view.windowmanager; import android.widget.toast; public class tutorial1activity extends activity implements cvcameraviewlistener2 { private static final string tag = "divyesh::activity"; private camerabridgeviewbase mopencvcameraview; private boolean misjavacamera = true; private menuitem mitemswitchcamera = null; public point p1 = new point(10, 2); public point p2 = new point(100, 20); public scalar scalar = new scalar(255, 255, 255); public mat fgmask; public mat mrgba, mgray, mrgb; //public backgroundsubtractor pmog, pmog2; backgroundsubtractormog pmog; private baseloadercallback mloadercallback = new baseloadercallback(this) { @override public void onmanagerconnected(int status) { switch (status) { case loadercallbackinterface.success: { log.i(tag, "opencv loaded successfully"); mopencvcameraview.enableview(); } break; default: { super.onmanagerconnected(status); } break; } } }; public tutorial1activity() { log.i(tag, "instantiated new " + this.getclass()); } /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { log.i(tag, "called oncreate"); super.oncreate(savedinstancestate); getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on); setcontentview(r.layout.tutorial1_surface_view); if (misjavacamera) mopencvcameraview = (camerabridgeviewbase) findviewbyid(r.id.tutorial1_activity_java_surface_view); else mopencvcameraview = (camerabridgeviewbase) findviewbyid(r.id.tutorial1_activity_native_surface_view); mopencvcameraview.setvisibility(surfaceview.visible); mopencvcameraview.setcvcameraviewlistener(this); } @override public void onpause() { super.onpause(); if (mopencvcameraview != null) mopencvcameraview.disableview(); } @override public void onresume() { super.onresume(); opencvloader.initasync(opencvloader.opencv_version_2_4_3, this, mloadercallback); } public void ondestroy() { super.ondestroy(); if (mopencvcameraview != null) mopencvcameraview.disableview(); } @override public boolean oncreateoptionsmenu(menu menu) { log.i(tag, "called oncreateoptionsmenu"); mitemswitchcamera = menu.add("toggle native/java camera"); return true; } @override public boolean onoptionsitemselected(menuitem item) { string toastmesage = new string(); log.i(tag, "called onoptionsitemselected; selected item: " + item); if (item == mitemswitchcamera) { mopencvcameraview.setvisibility(surfaceview.gone); misjavacamera = !misjavacamera; if (misjavacamera) { mopencvcameraview = (camerabridgeviewbase) findviewbyid(r.id.tutorial1_activity_java_surface_view); toastmesage = "java camera"; } else { mopencvcameraview = (camerabridgeviewbase) findviewbyid(r.id.tutorial1_activity_native_surface_view); toastmesage = "native camera"; } mopencvcameraview.setvisibility(surfaceview.visible); mopencvcameraview.setcvcameraviewlistener(this); mopencvcameraview.enableview(); toast toast = toast.maketext(this, toastmesage, toast.length_long); toast.show(); } return true; } public void oncameraviewstarted(int width, int height) { mrgba = new mat(); mgray = new mat(); mrgb = new mat(); fgmask = new mat(); log.i(tag, "before subtractor"); pmog = new backgroundsubtractormog(); } public void oncameraviewstopped() { } public mat oncameraframe(cvcameraviewframe inputframe) { log.i(tag, "before input frame"); mrgba = inputframe.rgba(); //imgproc.cvtcolor(mrgba, mrgb, imgproc.color_rgba2rgb); log.i(tag,"before apply"); pmog.apply(mrgba, fgmask); log.i(tag,"after apply"); //imgproc.cvtcolor(fgmask, mrgba, imgproc.color_gray2rgba); return fgmask; } }
my error @ here:
/** *
computes foreground mask.
* * @param image next video frame. * @param fgmask output foreground mask 8-bit binary image. * * @see org.opencv.video.backgroundsubtractor.operator() */public void apply(mat image, mat fgmask) { apply_1(nativeobj, image.nativeobj, fgmask.nativeobj); return; }
thanx lot if can solve or can give instruction...........
i haven't used or worked background subtraction before try following edit in code. mrgba = inputframe.rgba(); imgproc.cvtcolor(mrgba, mrgb, imgproc.color_rgba2bgr,4); log.i(tag,"before apply"); pmog.apply(mrgb, fgmask); log.i(tag,"after apply"); imgproc.cvtcolor(fgmask, mrgb, imgproc.color_gray2bgr,3); imgproc.cvtcolor(mrgb, mrgba, imgproc.color_bgr2rgba,4); return fgmask;
also check link. think might help:http://www.codeproject.com/articles/791145/motion-detection-in-android-howto
hope helps.
Comments
Post a Comment