我正在尝试使用openCV构建一个新的应用程序,但我的应用程序崩溃,甚至没有一个日志语句。然后我将Crashlytics集成到我的应用程序中,它显示了以下问题
Fatal Exception: java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.imgproc.Imgproc.Canny_3(long, long, double, double) (tried Java_org_opencv_imgproc_Imgproc_Canny_13 and Java_org_opencv_imgproc_Imgproc_Canny_13__JJDD)
at org.opencv.imgproc.Imgproc.Canny_3(Imgproc.java)
at org.opencv.imgproc.Imgproc.Canny(Imgproc.java:1038)
at aac.scanner.MainActivity.onCameraFrame(MainActivity.java:72)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:392)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:352)
at java.lang.Thread.run(Thread.java:818)
对于这个问题,我还检查了其他答案,如Android UnsatisfiedLinkError with OpenCV 2.4.2或Unsatisfied Link Error - OpenCV for Android Non-native,但其中没有一个对我有效。
由于我的应用程序项目没有JNI部分,所以我将相应的OpenCV本机库从/ sdk / native / libs /复制到我的项目目录到文件夹main / jniLibs,如此tutorial所示
onResume 方法
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, baseLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
baseLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
onCameraFrame 方法
rgba = inputFrame.rgba();
Imgproc.GaussianBlur(rgba,gray,new Size(5,5),0);
Imgproc.Canny(gray,canny,75,200);
return canny;
BaseLoaderCallback
private BaseLoaderCallback baseLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status){
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG,"onManagerConnected");
javaCameraView.enableView();
break;
default:
super.onManagerConnected(status);
break;
}
}
};
更新
因为我从运行非Native openCV代码获得UnsatisfiedLinkError
,所以SO上类似帖子的解决方案都没有为我工作。我已经在Native openCV代码中编写了所有代码,现在我的代码运行没有任何错误。