No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 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 类都在 这里

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

原文由 Pial Kanti 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

我已成功消除错误,并且我的应用程序在执行此行时不会崩溃 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 类在 这里

参考链接:

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

原文由 Pial Kanti 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

原文由 user7176550 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题