Не найдено выполнения для long org.opencv.core.Mat.n_Mat() error Использование 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, к которому принадлежит этот код, находится здесь.

Что я должен сделать, чтобы устранить ошибку?

Ответ 1

Я успешно устранил ошибку, и мое приложение не сработает при выполнении этой строки imageMat=new Mat();

Причиной ошибки является то, что Android вызывает метод "onCreate" до загрузки библиотеки OpenCV4Android. Поэтому я использовал инициализацию Async OpenCV с помощью OpenCVManager. Я создал BaseLoaderCallback до onCreate. И внутри этого я объявил новый 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 здесь.

Ссылки:

Ответ 2

Инициализируйте библиотеку openCV в своей деятельности, добавьте этот код перед методом onCreate()

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

добавьте эту библиотеку в ваш проект: https://github.com/hschott/Camdroid

Ответ 3

Я поместил эту строку в метод onCreate и убедился, что openCvManager установлен. Это работало нормально для меня.

OpenCVLoader.initDebug();

Ответ 4

Может быть, вы забыли включить библиотеку openCV.

Включают

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

для версии 3 OpenCV вы должны вместо этого добавить:

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

Удачи :)

Ответ 5

Привет, кто-нибудь может заглянуть сюда?

Та же проблема, но я уже сделал то, что он сделал.