我正在尝试将Open CV Library加载到我的Android Studio应用程序中。我需要在我的应用程序中进行圆检测。
我使用本教程加载此库: How to use opencv in android studio using gradle build tool? (本页最后一页)。
在运行我的程序之前,一切正常。但是当我试图运行它时,我有一个错误:
06-11 14:48:02.010 1349-1349/com.example.teczowka.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Couldn't load opencv_java249: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
at com.example.teczowka.app.MojHough.process(MojHough.java:23)
at com.example.teczowka.app.MainActivity.onOptionsItemSelected(MainActivity.java:98)
at android.app.Activity.onMenuItemSelected(Activity.java:2534)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:372)
at android.support.v7.app.ActionBarActivity.superOnMenuItemSelected(ActionBarActivity.java:244)
at android.support.v7.app.ActionBarActivityDelegateICS.onMenuItemSelected(ActionBarActivityDelegateICS.java:164)
at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:130)
at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onMenuItemSelected(ActionBarActivityDelegateICS.java:308)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:958)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
at android.widget.AbsListView$1.run(AbsListView.java:3529)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
我几乎尝试了一切,我不知道发生了什么。我花了一整天时间才弄明白 - 没有结果。任何人都可以帮助我吗?
这是我的代码:
public Bitmap process(Bitmap src) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat imgSource = new Mat();
Mat imgCirclesOut = new Mat();
Utils.bitmapToMat(src, imgSource);
//grey opencv
Imgproc.cvtColor(imgSource, imgSource, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imgSource, imgSource, new Size(9, 9), 2, 2);
Imgproc.HoughCircles(imgSource, imgCirclesOut, Imgproc.CV_HOUGH_GRADIENT, 1, imgSource.rows() / 8, 200, 100, 0, 0);
float circle[] = new float[3];
for (int i = 0; i < imgCirclesOut.cols(); i++) {
imgCirclesOut.get(0, i, circle);
org.opencv.core.Point center = new org.opencv.core.Point();
center.x = circle[0];
center.y = circle[1];
Core.circle(imgSource, center, (int) circle[2], new Scalar(255, 0, 0, 255), 4);
}
Bitmap bmp = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(imgSource, bmp);
return bmp;
}
答案 0 :(得分:2)
首先尝试在静态块中加载所有库
static{
OpenCVLoader.initDebug();
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
并检查您的apk文件以确保apk中包含opencv库(* .so)。 (尝试使用存档查看器打开apk并查看内部&#34; libs&#34;目录)
最后库名有点奇怪,通常是&#34; libopencv_java.so&#34; (对于所有opencv版本,包括2.4.9)所以我想尝试加载而不是Core.NATIVE_LIBRARY_NAME来查看是否发生了任何事情。
答案 1 :(得分:0)
我建议您将原生库添加到项目中,即.so文件。 您需要在项目中的\ lib \文件夹中添加此路径中的平台文件夹: OpenCV的-x.x.xx-Android的SDK \ SDK \本地\库\ - 阿尔梅比 - armeabi-v7a - mips - x86
您需要添加哪个文件夹取决于您的目标架构,这就是我解决您遇到的问题的方法。