不能';t load opencv_java249:findLibrary在Android Studio中返回null-opencv

不能';t load opencv_java249:findLibrary在Android Studio中返回null-opencv,java,android,opencv,Java,Android,Opencv,我正在尝试将Open CV库加载到我的Android Studio应用程序中。我需要在我的应用程序中进行圆检测 我使用本教程加载此库: (本页最后一页) 在运行我的程序之前,一切看起来都正常。但当我试图运行它时,我有一个错误: 06-11 14:48:02.010 1349-1349/com.example.teczowka.app E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsatisfiedLinkError: Coul

我正在尝试将Open CV库加载到我的Android Studio应用程序中。我需要在我的应用程序中进行圆检测

我使用本教程加载此库: (本页最后一页)

在运行我的程序之前,一切看起来都正常。但当我试图运行它时,我有一个错误:

   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;
}
公共位图进程(位图src){
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
Mat imgSource=新Mat();
Mat imgCirclesOut=新Mat();
Utils.bitmapToMat(src,imgSource);
//灰色opencv
Imgproc.cvt颜色(imgSource,imgSource,Imgproc.COLOR\u bgr2灰色);
Imgproc.GaussianBlur(imgSource,imgSource,新尺寸(9,9),2,2);
Imgproc.HoughCircles(imgSource,imgCircleOut,Imgproc.CV_HOUGH_GRADIENT,1,imgSource.rows()/82000100,0,0);
浮动圆[]=新浮动[3];
for(int i=0;i
首先,尝试在静态块中加载所有库

static{
    OpenCVLoader.initDebug();
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
并检查apk文件,确保apk中包含opencv库(*.so)。(尝试使用存档查看器打开apk并查看“libs”目录)


最后,库名有点奇怪,它通常是“libopencv_java.so”(适用于包括2.4.9在内的所有opencv版本),因此我想尝试加载它而不是Core.NATIVE_library_名称,以查看是否发生了任何事情。

我建议您将本机库添加到项目中,.so文件。 您需要将以下路径中的平台文件夹添加到项目中的\lib\文件夹: OpenCV-x.x.xx-android-sdk\sdk\native\libs\ -阿姆亚比 -armeabi-v7a -mips -x86


您需要添加哪个文件夹取决于您的目标体系结构,这就是我解决您的问题的方法。

我建议您使用Core.java,而不是您当前正在使用的。官方Core.java返回Core.NATIVE_库名称的
opencv_java249
,这很奇怪,尽管实际名称是
opencv_java.so
。无论如何,使用
OpenCVLoader.initDebug()
应该足够了-不需要
System.loadLibrary(…)