Android 接入 OpenCV4.1.0 sdk流程

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  1. 首先我们去下载sdk 点击即可 OpenCV下载链接,下载完成之后 我们来看看下载的文件
     

    sdk 目录提供了Android的API与Java 库

    sdk/java 目录包含了一个 Eclipse 项目,该项目提供 OpenCV 的Java API,且可以导入到开发环境里。

    sdk/native 目录包含了OpenCV C++ 头文件(用于JNI),与Android的 .so动态库 .a静态库。

    sdk/etc 目录包含了Haar 与 LBP cascades 级联。

    apk  目录包含了用户安装在指定的Android设备的安装文件,该文件使opencv 库可以管理opencv API
    (以上解释参考了http://www.cnblogs.com/xiaoxiaoqingyi/p/6676096.html 解释的非常清楚,本文只是做个笔记,加入个人理解,为以后使用作参考。)

  2. 创建android studio项目并且导入 sdk/java 文件以module的形式
    具体一个module的导入流程我就不多说了,导入module之后会报一系列的错误;
    错误一:

    Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve project :java.
    Open File
    Show Details
    Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve project :java.
    Open File
    Show Details

    这个错误是因为我们导入的opencv的java文件是个 application 而不是一个library,所以修改方法首先打开我们导入的opencv module的buid.gradle 把application修改成library

    错误二:

    brary projects cannot set applicationId. applicationId is set to 'org.opencv' in default config.
    

    如图把深色部分删除重新编译即可:

    这样我们的项目就能编译通过了。

  3. 集成.so文件

    1.在项目中app/src/main下面创建 package 名为 jniLibs 包名。
    2.把 sdk/native/libs  中的so文件拷贝到 jniLibs 包下面,注意此时apk会变得很大大约60M,so 我们需要把无用的so给删除
    3.我们知道armeabi-v7a 和 arm64-v8a 是不同手机cpu编译的文件,而 x86 和 x86_64 是模拟器编译的so文件,所以我们可以把模拟器的so给删除,因为我们都用手机,这时apk大约10M左右。
     
  4. 调用代码检测 opencv 是否配置成功
    在mainactivity中我们可以添加以下代码:
        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
            @Override
            public void onManagerConnected(int status) {
                switch (status) {
                    case LoaderCallbackInterface.SUCCESS: {
                        Log.i("rr", "OpenCV loaded successfully");
                    }
                    break;
                    default: {
                        super.onManagerConnected(status);
                    }
                    break;
                }
            }
        };
    
      @Override
        protected void onResume() {
            super.onResume();
            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);
            }
        }

    接着运行 项目,查看log日志,观察是否成功。
    编译成功的地址github:https://github.com/WangRain1/OpencvDemo  我的是ubuntu系统
    commit id 切换到:just add opencv sdk.

发布了119 篇原创文章 · 获赞 140 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/WangRain1/article/details/89491258