Android Studio 2.2 中引入opencv 2.4.11

Android Studio 2.2 中引入opencv 2.4.11

准备材料

  1. Android Studio 2.2(百度网盘地址:https://pan.baidu.com/s/1c29ir4k
  2. OpenCV-android-sdk(选择版本2.4.11: https://opencv.org/releases.html
  3. SDK(基础包下载地址:https://pan.baidu.com/s/1dEEoALN,注意,这只是基础包,用它来继续下载你需要的其他工具包)
  4. JDK:1.8及以上即可(官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  5. 注:上面地址失效的话请自行下载对应的版本

引入步骤

  1. 新建一个android项目
  2. File->New->Import Module,如图
  3. 然后选下载好OpenCV-android-sdk(解压后)下的的java文件夹
  4. 导入成功会在当前的工作目录下看到
  5. 然后:File->Project Structure->app->Dependencies->+将openCVLibrary2411依赖到当前的android项目
  6. 添加依赖之后,就可以在项目中引用OpenCV相关API代码了,如果你此刻运行测试apk程序,它就会提示你安装OpenCV Manager这个东西。对多数开发者来说这不算配置成功,这样自己的APP就无法独立安装,必须依赖OpenCV Manager这个apk文件才可以运行,这个时候就该放大招来解决这个问题,首先把我们准备阶段看到SDK下面native文件下所有的文件都copy到你创建好的项目libs目录下,然后在gradle中加上如下一段脚本

    task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
        destinationDir file("$buildDir/native-libs")
        baseName 'native-libs'
        from fileTree(dir: 'libs', include: '**/*.so')
        into 'lib/'
    }
    
    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }
    

    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    
    • 注:位置

测试代码

  • 将图片灰度化,用弹出框的形式Icon进行测试,然后再onCreate函数中相继调用initOpenCV()函数和convertGray()函数

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //初始化opencv库
    initOpenCV();
    //测试函数
    convertGray();
}

//初始化opencv库
private void initOpenCV() {
    OpenCVLoader.initDebug();
}

//函数测试
private void convertGray() {
    Bitmap selectbp = BitmapFactory.decodeResource(getResources(), R.drawable.fenxi);
    Mat src = new Mat();
    Mat temp = new Mat();
    Mat dst = new Mat();
    Utils.bitmapToMat(selectbp, src);
    Imgproc.cvtColor(src, temp, Imgproc.COLOR_BGRA2BGR);
    Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY);
    Utils.matToBitmap(dst, selectbp);
    new AlertDialog.Builder(MainActivity.this).setIcon(new BitmapDrawable(selectbp)).setTitle("提示:").setMessage("hhh").show();
}

如果你能成功运行App,并且弹出框(Icon为灰度图),那么恭喜你,成功啦!

如果你没有成功的话,莫着急,来填坑吧

  • 我遇到的一直是初始化失败(加载库失败)
  • 改了一下几个内容(把源码都改了,哈哈)
    1. 版本问题:25以上的需要修改一下源码
      • 修改之后的函数:

        public static boolean initOpenCV(String Version, final Context AppContext,
                                         final LoaderCallbackInterface Callback) {
            AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext,
                    Callback);
            Intent intent = new Intent("org.opencv.engine.BIND");
            intent.setPackage("org.opencv.engine");
            if (AppContext.bindService(intent, helper.mServiceConnection,
                    Context.BIND_AUTO_CREATE)) {
                return true;
            } else {
                AppContext.unbindService(helper.mServiceConnection);
                InstallService(AppContext, Callback);
                return false;
            }
        }
        
    2. 复制依赖文件到项目下(将OpenCV-android-sdk下的native下的这三个文件夹复制到android项目下的app下的libs文件夹下),如图
    3. 版本号问题

还有其他的问题的话请自行百度吧!!


猜你喜欢

转载自blog.csdn.net/eieiei438/article/details/80593355