首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV独立安装程序opencv

OpenCV独立安装程序opencv
EN

Stack Overflow用户
提问于 2013-10-11 01:28:50
回答 2查看 1K关注 0票数 5

我正在开发一个OpenCV应用程序,它工作得很好,但当我尝试安装该应用程序时,它会要求下载OpenCV管理器,而我并不想要它。我想为OpenCV应用程序做一个独立的安装程序,其中包括OpenCV管理器?我确实检查了this link,但它仍然显示弹出安装opencv?

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 17:06:09

根据我的经验,你可能只需要做以下2(或3)步:

1.更改java中的load lib代码,如下所示:

代码语言:javascript
运行
复制
static {
  Log.i(TAG,"OpenCV library load!");
  if (!OpenCVLoader.initDebug()) {
    Log.i(TAG,"OpenCV load not successfully");
  }
  else {
    System.loadLibrary("opencv_java");// load other libraries
  }
}

2.删除java中的以下代码:

代码语言:javascript
运行
复制
OpenCVLoader.initAsync(OpenCVLoader.OpenCV_VERSION_2_4_3, this, mLoaderCallback);

3.如果您已经将ndk代码添加到您的项目中,则可能需要编辑Android.mk文件,如下所示:

代码语言:javascript
运行
复制
OpenCV_CAMERA_MODULES:=on
OpenCV_INSTALL_MODULES:=on
OpenCV_LIB_TYPE:=SHARED
票数 2
EN

Stack Overflow用户

发布于 2018-10-20 01:34:13

解决方案

为libopencv_java3.so提供APK时,OpenCV加载器不需要OpenCV管理器

只需将OpenCV库文件夹(参见下面的Context )复制到包含AndroidManifext.xml的文件夹中。现在将这个libs文件夹重命名为jniLibs。结果应该看起来像下面的结构。Props to this post。这里还有更多的细节。

代码语言:javascript
运行
复制
android studio project/
├──libs/
|  └── *.jar       <-- if your library has jar files, they go here
├──src/
   └── main/
       ├── AndroidManifest.xml
       ├── java/
       └── jniLibs/ 
           ├── arm64-v8a/                       <-- ARM 64bit
           │   └── libopencv_java3.so
           ├── armeabi-v7a/                     <-- ARM 32bit
           │   └── libopencv_java3.so
           ├── x86/                             <-- Intel 32bit
           │   └── libopencv_java3.so
           └── ...
               └── libopencv_java3.so

现在构建您的APK文件。确保您的应用程序中正确提供了这些库。以下是构建后的APK:

代码语言:javascript
运行
复制
[project name]\[app name]\build\outputs\apk\debug

只需使用您选择的Zip程序打开APK即可。上面列出的*.so文件应该在APK中列出:

代码语言:javascript
运行
复制
APK file/
├──lib/
|  ├── arm64-v8a/                       
|  │   └── libopencv_java3.so
|  ├── armeabi-v7a/                     
|  │   └── libopencv_java3.so
|  ├── x86/                             
|  │   └── libopencv_java3.so
|  └── ...
|      └── libopencv_java3.so
├─ ...

使用此应用程序密钥应该会导致OpenCV不再寻找OpenCV管理器应用程序。当然,通过为每个ABI提供库,您的APK会变得非常大。根据您的用例,仅为目标ABI/平台提供库可能会变得有用。可以为支持的ABI创建筛选器。如果是相关的start reading here

享受吧!

上下文

在运行时,您的应用程序需要OpenCV库文件libopencv_java3.so。根据您要使用该文件的目标平台,该文件有不同的版本。查看位于以下位置的本地OpenCV SDK目录:

SDK\sdk\native\libs\的

  • OpenCV

通过提供相应的OpenCV库文件,您将在此处找到所提供的ABIs/平台的简短列表:

  • armeabi
  • armeabi-v7a
  • x86
  • x86_64
  • arm64-v8a

安卓OpenCV管理器

据我所知,OpenCV管理器应用程序在从以下位置调用时,除了向应用程序提供所需的OpenCV库之外,什么也不做:

代码语言:javascript
运行
复制
if (!OpenCVLoader.initDebug()) {
        Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
    } else {
        Log.d(TAG, "OpenCV library found inside package. Using it!");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }

当您有多个应用程序需要OpenCV库时,这很有意义。所以你只会在你的移动设备上存储一次,而不是作为每个应用程序的一部分。

当您在OpenCV源you'll end up at this statement中查看OpenCVLoader.initDebug()的作用时

代码语言:javascript
运行
复制
loadLibrary("opencv_java3")

所以基本上在查询OpenCV管理器之前,OpenCV会尝试在你的APK中找到APK库文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19302367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档