找不到长的org.opencv.core.Mat.n_Mat()错误使用OpenCV

Pia*_*nti 32 android opencv

我正在使用OpenCV for adaptiveThreshold.我使用OpenCV进行图像处理的代码如下:

imageMat=new Mat();
Utils.bitmapToMat(bmp, imageMat);
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
Imgproc.adaptiveThreshold(imageMat, imageMat, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4);
Run Code Online (Sandbox Code Playgroud)

但是我在宣布Mat时遇到错误.喜欢:

No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
        at org.opencv.core.Mat.n_Mat(Native Method)
        at org.opencv.core.Mat.<init>(Mat.java:24)
        at com.example.pial_pc.instantbookreview.ImageCapture$3.onPictureTaken(ImageCapture.java:105)
Run Code Online (Sandbox Code Playgroud)

作为OpenCV的新手,我并不清楚错误.这段代码所属的整个java类都在这里.

我该怎么做才能消除错误?

Pia*_*nti 48

我已成功消除错误,我的应用程序在执行此行时不会崩溃 imageMat=new Mat();

出错的原因是Android 在加载OpenCV4Android库之前调用了"onCreate"方法.所以我使用OpenCVManager使用了OpenCV的异步初始化.我在onCreate方法之前创建了BaseLoaderCallback.在里面,我已经宣布了新的Mat():

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i("OpenCV", "OpenCV loaded successfully");
                imageMat=new Mat();
            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在onResume()中,我检查了OpenCV库是否已从当前应用程序包中加载和初始化.代码如下:

public void onResume()
{
    super.onResume();
    if (!OpenCVLoader.initDebug()) {
        Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
    } else {
        Log.d("OpenCV", "OpenCV library found inside package. Using it!");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的错误消失了.我的完整更新的java类就在这里.

参考链接:

  1. 使用OpenCVManager在Android上对OpenCV进行异步初始化
  2. Tutorial1Activity.java


use*_*550 8

在您的活动中初始化openCV库,在onCreate()方法之前添加此代码

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的项目中添加此lib:https://github.com/hschott/Camdroid


Sid*_*eja 7

也许您忘记包含 openCV 库。

包括

static { 
     System.loadLibrary("opencv_java");
}
Run Code Online (Sandbox Code Playgroud)

对于 OpenCV 版本 3,您应该添加:

static { 
     System.loadLibrary("opencv_java3");
}
Run Code Online (Sandbox Code Playgroud)

祝你好运 :)


小智 7

我将此行放在onCreate方法上,并确保已安装openCvManager。这对我来说很好。

OpenCVLoader.initDebug();