Android Opencv静态初始化

时间:2016-02-24 08:22:13

标签: android opencv opencv3.0 opencv4android

我在我的应用中使用OpenCV for Android使用静态初始化。初始化的代码是 -

static {
    if(!OpenCVLoader.initDebug()) {
        Log.d("My App", "Unable to load OpenCV");
    } else {
        Log.d("My App", "OpenCV loaded");
    }
}

这很好用。但在OpenCV文档中,指定不推荐使用initDebug() -

  

注意对于生产代码,不推荐使用此方法。它是专为   仅用于实验和本地开发目的。如果你想   使用异步初始化发布您的应用使用方法。

现在,如果我使用异步初始化,它将使用应安装在设备上的OpenCV管理器应用程序。这不是我想要的。

我的问题是 - 如果不推荐使用initDebug()在发布模式下使用,是否还有其他方法可以加载不使用OpenCV Manager的openCV?或者使用initDebug()加载OpenCV是否安全?

4 个答案:

答案 0 :(得分:2)

我的回答将来自我使用该库的经验!

{OpenCVLoader.initDebug()遍历一些选项,最后使用System.loadLibrary("lib_name")将库加载到内存中,并尝试向您介绍一些日志!

OpenCVLoader.initDebug()方法documentation

  

从当前应用程序包加载并初始化OpenCV库。   大致上,它类似于System.loadLibrary(“ opencv_java”)。

因此,最后,如果您要使用静态加载的库,这在大多数情况下会更方便,因为您不希望用户安装其他应用程序以使用您的应用程序,则应将该库加载到内存中使用System.loadLibrary("lib_name")就能在Java代码中使用它们,直接加载还是使用initDebug帮助程序方法并没有关系。

注意:库的新版本在库名称的末尾附加了该版本,因此您应使用System.loadLibrary("opencv_java3")jniLibs文件夹中库名称的任何名称!

答案 1 :(得分:1)

不要担心initDebug(),它在发布模式下也是安全的。对于未来版本的OpenCV for Android应该是一个问题。如果您不更改版本,请不要担心。

答案 2 :(得分:1)

在尝试这个answer时,我引用了以下内容:

  

OpenCVLoader.initDebug()仅可用于调试目的,因为   当您在计算机上本地开发时。但是为了生产   您需要在Play商店上发布应用的目的,等等。   必须使用OpenCVLoader.initAsync()。实际初始化   OpenCVLoader需要一些时间,具体取决于手机。因此,如果您加载   它使用initDebug(),然后将在主线程中执行,   这可能会在一段时间内阻塞用户界面。所以建议加载   可以使用initAsync()

在后台打开OpenCV

答案 3 :(得分:0)

保存使用静态初始化。我在项目中使用过它并进行了大量测试。