java.lang.UnsatisfiedLinkError:找不到本机方法:org.opencv.imgproc.Imgproc.rectangle_1

时间:2015-12-24 12:17:28

标签: android opencv android-studio

我目前正在开发面部识别的Android应用程序。所以我从github获得了一个源代码。它使用的是OpenCv,但源代码使用旧版本的OpenCv,而我使用的是3.0.0的最新版本。代码没有错误,并且它成功打开了应用程序,但是当我指向某个人的脸时,它突然停止了工作。

它给了我一个这样的错误:

 Process: com.example.syafiq.test, PID: 3249
 java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.imgproc.Imgproc.rectangle_1:(JDDDDDDDDI)V
     at org.opencv.imgproc.Imgproc.rectangle_1(Native Method)
     at org.opencv.imgproc.Imgproc.rectangle(Imgproc.java:2779)
     at com.example.syafiq.test.FdActivity.onCameraFrame(FdActivity.java:431)
     at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:393)
     at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:346)
     at java.lang.Thread.run(Thread.java:841)

(Imgproc.java:2779)指出:

rectangle_1(img.nativeObj, pt1.x, pt1.y, pt2.x, pt2.y, color.val[0], color.val[1], color.val[2], color.val[3], thickness);

(FdActivity.java:431)指出:

 (line430) for (int i = 0; i < facesArray.length; i++)
 (line431) Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);

在此之前,(FdActivity.java:431)上的源代码是Core.rectangle并且它是一个错误,所以我已经将它改为基于互联网的Imgproc,我已经发现修复了该代码行。

开(CameraBridgeViewBase.java:393)指出:

(line392) if (mListener != null) {
(line393) modified = mListener.onCameraFrame(frame);

On(JavaCameraView.java:346)指出:

(line345) if (!mFrameChain[1 - mChainIdx].empty())
(line346) deliverAndDrawFrame(mCameraFrame[1 - mChainIdx]);

我是Android开发的新手,也是OpenCV的新手:/我感谢您的时间并帮助我考虑帮助我。

提前致谢:)

1 个答案:

答案 0 :(得分:5)

昨天我在寻找同一答案的解决方案时看到了这个悬而未决的问题。我找不到符合我情况的答案。事实证明我的解决方案非常简单。我使用的是为OpenCV 2.4编写的示例代码,当我使用OpenCV 3.1时,我不得不从Core.rectangle更改为ImgProc.rectanle。我的代码和包含很好,但我错过了我的异步初始化有错误的版本。我需要将我的初始化更新为正确的版本。

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0,this,mLoaderCallback);

纠正了这个问题。由于您的问题是5个月大,您可能会继续前进,但其他人可能会看到这一点。