OpenCv on Android without using OpenCv manager is not working -
am using opencv on android , when run application give me option of installing opencv manager , don't want use option application. followed this answer forum, follow steps still asking me opencv manager.
below android.mk
local_path := $(call my-dir) include $(clear_vars) opencv_camera_modules:=on opencv_install_modules:=on opencv_lib_type:=static include c:\opencv-2.4.10-android-sdk\sdk\native\jni\opencv.mk local_module := mixed_sample local_src_files := jni_part.cpp local_ldlibs += -llog -ldl include $(build_shared_library)
and properties option
i add below code crashes @override public void onresume() { super.onresume(); mloadercallback.onmanagerconnected(loadercallbackinterface.success); }
my code after static initialization
public class tutorial2activity extends activity implements cvcameraviewlistener2 { static { if (!opencvloader.initdebug()) { // handle initialization error } } private static final string tag = "ocvsample::activity"; private static final int view_mode_rgba = 0; private static final int view_mode_gray = 1; private static final int view_mode_canny = 2; private static final int view_mode_features = 5; private int mviewmode; private mat mrgba; private mat mintermediatemat; private mat mgray; private menuitem mitempreviewrgba; private menuitem mitempreviewgray; private menuitem mitempreviewcanny; private menuitem mitempreviewfeatures; private camerabridgeviewbase mopencvcameraview; private baseloadercallback mloadercallback = new baseloadercallback(this) { @override public void onmanagerconnected(int status) { switch (status) { case loadercallbackinterface.success: { log.i(tag, "opencv loaded successfully"); // load native library after(!) opencv initialization system.loadlibrary("mixed_sample"); mopencvcameraview.enableview(); } break; default: { super.onmanagerconnected(status); } break; } } }; public tutorial2activity() { 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.tutorial2_surface_view); mopencvcameraview = (camerabridgeviewbase) findviewbyid(r.id.tutorial2_activity_surface_view); mopencvcameraview.setcvcameraviewlistener(this); }
and on
edit
public mat oncameraframe(cvcameraviewframe inputframe) { final int viewmode = mviewmode; switch (viewmode) { case view_mode_gray: // input frame has gray scale format imgproc.cvtcolor(inputframe.gray(), mrgba, imgproc.color_gray2rgba, 4); break; case view_mode_rgba: // input frame has rbga format mrgba = inputframe.rgba(); break; case view_mode_canny: // input frame has gray scale format mrgba = inputframe.rgba(); imgproc.canny(inputframe.gray(), mintermediatemat, 80, 100); imgproc.cvtcolor(mintermediatemat, mrgba, imgproc.color_gray2rgba, 4); break; case view_mode_features: // input frame has rgba format mrgba = inputframe.rgba(); mgray = inputframe.gray(); findfeatures(mgray.getnativeobjaddr(), mrgba.getnativeobjaddr()); break; } return mrgba; } public boolean onoptionsitemselected(menuitem item) { log.i(tag, "called onoptionsitemselected; selected item: " + item); if (item == mitempreviewrgba) { mviewmode = view_mode_rgba; } else if (item == mitempreviewgray) { mviewmode = view_mode_gray; } else if (item == mitempreviewcanny) { mviewmode = view_mode_canny; } else if (item == mitempreviewfeatures) { mviewmode = view_mode_features; } return true; } public native void findfeatures(long mataddrgr, long mataddrrgba);
in opencv, can async or static initialization. want static initialization. remember deprecated opencv use production, how can see here.
in accordance same link, can see android.mk
correct. apparently forgot 4th step, is:
java initialization code before calling opencv api. can done, example, in static section of activity class:
static { if (!opencvloader.initdebug()) { // handle initialization error } }
if application includes other opencv-dependent native libraries should load them after opencv initialization:
static { if (!opencvloader.initdebug()) { // handle initialization error } else { system.loadlibrary("my_jni_lib1"); system.loadlibrary("my_jni_lib2"); } }
edit 1
don't forget remove line makes asyn initialization, is:
opencvloader.initasync(opencvloader.opencv_version_2_4_3, this, mloadercallback);
and add line:
mloadercallback.onmanagerconnected(loadercallbackinterface.success);
ps: edit android.mk
file when have project with jni part. in case of project doesn’t have jni part, should copy corresponding opencv native libs opencv-android-sdk/sdk/native/libs/
libs/
folder in project.
edit 2
to build native libs, follow instrucitions in this link
attemp last step:
either use manual ndk-build invocation or setup eclipse cdt builder build native jni lib before (re)building java part , creating apk.
that is, have run ndk-build in project root, way generated libs necessary app.
Comments
Post a Comment