Android OpenCV JavaCamera2View初始化失败

时间:2018-11-23 13:26:01

标签: java android opencv mat

我尝试使用JavaCamera2View在具有opencv的android设备上运行camerapreview。我对旧的JavaCameraView没问题。

这是错误消息。

  

2018-11-23 13:56:03.199 8034-8052 / com.lesafrance.dev.cam2 E / art:否   长org.opencv.core.Mat.n_Mat(int,int,int,   java.nio.ByteBuffer)(尝试Java_org_opencv_core_Mat_n_1Mat和   Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2)2018-11-23   13:56:03.200 8034-8052 / com.lesafrance.dev.cam2 E / Android运行时:致命   例外:OpenCVCameraBackground       流程:com.lesafrance.dev.cam2,PID:8034       java.lang.UnsatisfiedLinkError:找不到长org.opencv.core.Mat.n_Mat(int,int,int,java.nio.ByteBuffer)的实现(尝试   Java_org_opencv_core_Mat_n_1Mat和   Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2)           在org.opencv.core.Mat.n_Mat(本机方法)           在org.opencv.core.Mat(Mat.java:52)           在org.opencv.android.JavaCamera2View $ 2.onImageAvailable(JavaCamera2View.java:183)           在android.media.ImageReader $ ListenerHandler.handleMessage(ImageReader.java:687)           在android.os.Handler.dispatchMessage(Handler.java:102)           在android.os.Looper.loop(Looper.java:154)           在android.os.HandlerThread.run(HandlerThread.java:61)

我知道没有OpenCV初始化很常见,但是在我的代码中,必须启动OpenCV 这是代码

<!-- language: lang-java -->
     /*
     * JavaCamera2View (CameraBridgeViewBase) Loader
     */
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");
                    // Création des LUT
                    lutBLY = new Mat(1,256,CvType.CV_8UC3);

                    //Here LUT initialisation is ok    

                    mOpenCvCameraView.enableView(); //Fail here
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    }; 

一旦在createCameraPreviewSession()中调用enableView(),它就会失败

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我从错误消息的这一部分看到,根本没有加载OpenCV,这就是为什么它找不到Mat的实现

  

OpenCVCameraBackground进程:com.lesafrance.dev.cam2,PID:8034   java.lang.UnsatisfiedLinkError:长期未找到实现   org.opencv.core.Mat.n_Mat(int,int,int,java.nio.ByteBuffer)(尝试

尝试为OpenCV添加静态加载程序,例如,将其直接添加到BaseLoaderCallback类之前

static {
    if (!OpenCVLoader.initDebug())
        Log.d("ERROR", "Unable to load OpenCV");
    else
        Log.d("SUCCESS", "OpenCV loaded");
}

当它起作用时,您应该确定是否需要更改为动态加载,或者这样做很好。