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

时间:2016-01-29 17:48:05

标签: android opencv

我正在将OpenCV用于 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);

但是在声明 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)

作为OpenCV的新手,我并不清楚错误。这段代码所属的整个java类是here

如何消除错误?

6 个答案:

答案 0 :(得分:40)

我已成功消除错误,我的应用在执行此行imageMat=new Mat();

时不会崩溃

错误的原因是Android在加载OpenCV4Android库之前调用“onCreate”方法。所以我使用 OpenCVManager 使用了OpenCV的异步初始化。我在 onCreate 方法之前创建了 BaseLoaderCallback 。在内部,我已经声明 new 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;
        }
    }
};

然后在 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);
    }
}

我的错误消失了。我完整更新的java类是here

参考链接:

  1. Async Initialization of OpenCV on Android using OpenCVManager
  2. Tutorial1Activity.java

答案 1 :(得分:6)

Initialize openCV library in your activity add this code before onCreate() method

        static {
            if (!OpenCVLoader.initDebug()) {
            // Handle initialization error
            }
            }

add this lib in your project : https://github.com/hschott/Camdroid

答案 2 :(得分:4)

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

OpenCVLoader.initDebug();

答案 3 :(得分:1)

使用它来解决错误。

var result = pathname.substring(pathname.lastIndexOf("/") + 1);

答案 4 :(得分:0)

也许您忘记了包含openCV库。

包含

static { 
     System.loadLibrary("opencv_java");
}

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

static { 
     System.loadLibrary("opencv_java3");
}

祝你好运:)

答案 5 :(得分:-1)

任何在Android中通过 openvc4 遇到上述问题的人都尝试this,并评论是否有帮助。

需要一些重命名操作才能使其正常工作。