我尝试使用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(),它就会失败
有什么想法吗?
谢谢
答案 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");
}
当它起作用时,您应该确定是否需要更改为动态加载,或者这样做很好。