No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV

Posted

技术标签:

【中文标题】No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV【英文标题】:No implementation found for long org.opencv.core.Mat.n_Mat() error Using OpenCV 【发布时间】:2016-05-07 13:28:02 【问题描述】:

我正在为adaptiveThreshold 使用 OpenCV。我使用 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。

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

【问题讨论】:

【参考方案1】:

我已经成功消除了错误并且我的应用在执行这行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。

参考链接:

    Async Initialization of OpenCV on Android using OpenCVManager Tutorial1Activity.java

【讨论】:

不错的解决方案...帮了我很多 我真的需要帮助解决这个问题,你能帮帮我吗? ***.com/questions/61216402/…【参考方案2】:

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

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

在你的项目中添加这个库:https://github.com/hschott/Camdroid

【讨论】:

【参考方案3】:

也许您忘记包含 openCV 库。

包括

static  
     System.loadLibrary("opencv_java");

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

static  
     System.loadLibrary("opencv_java3");

祝你好运:)

【讨论】:

这对我有用。感谢 Siddharth Bhatheja! 我应该在我的活动课程中使用此代码吗? Kotlin 的等效代码是什么?【参考方案4】:

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

OpenCVLoader.initDebug();

【讨论】:

【参考方案5】:

使用它来解决错误。

public class MainActivity : Activity
    

        Mat m;
        Mat grayM;
        ImageView imageView;
        public MainActivity()
        
            if (!OpenCVLoader.InitDebug())
            
                System.Console.WriteLine("GG");
            

        

【讨论】:

【参考方案6】:

这对我有用:

确保在链接模块依赖项时将 native/libs opencv 中的文件复制到项目中的 jniLibs 目录,然后在 build.gradle(app) 构建中设置以下内容。

    sourceSets 
        main 
            jni 
                srcDirs 'src/main/jni', 'src/main/jniLibs'
            
        
    

然后将此添加到您的主要活动中

OpenCVLoader.initDebug()

【讨论】:

以上是关于No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

Android error--No implementation found for native Lcomd

Androidjava.lang.UnsatisfiedLinkError: No implementation found for void xx xx xx -- 问题解决

尝试将 Json 存储在 DB 中时,Ebean 'No service implementation found for SpiJsonService'

005android初级篇之jni 一个简单的报错No implementation found for

jni/ndk问题 :引用so库报错: java.lang.UnsatisfiedLinkError: No implementation found for

Android Telegram App --> java.lang.UnsatisfiedLinkError: No implementation found for void