zoukankan      html  css  js  c++  java
  • OpenCV

      OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,支持的运行环境也是非常的多,这篇文章主要讲的是Android环境集成OpenCV(IDE是Android Studio,我想Eclipse应该可以抛弃了哈~)。

      当然,通过本文所讲集成OpenCV之后,SIFT/SURF/FREAK等算法是不可以用的,这是因为OpenCV3之后,OpenCV将其转移到了opencv_contrib部分,需要我们将opencv_contrib编译进入之后再进行集成,这个在之后的文章里在说(这个还是两个月前搞的,部分情节可能记得不是很清楚,欢迎大神指出)。

    首先要做好的是准备工作:

      Android Studio:安装教程网上有很多

      OpenCV for Android:https://opencv.org/releases.html

      Opencv for Android库下载解压之后得到:

        

      文档结构说明:

    • apk目录里面放的是OpenCV Manager的安装文件,是不同CPU版本要选择不同apk安装文件,这种方式调用OpenCV需要用户自己安装OpenCV Manager,带来的用户体验很差,我们希望App自身能够默认安装OpenCV Manager,这篇文章将会告诉你如何做;
    • doc目录里面放的是相关文档与OpenCV的LOGO;
    • samples目录里面放的是OpenCV4Android的演示代码,大家可以参考一下;
    • sdk目录里面放的就是我们需要集成到Android Studio中的项目上去的东西,很重要。

    接下来就是正式的集成了集成步骤了:

      在Android Studio中创建一个Androd项目,进入项目之后,选择:File->New->Import Module

        

        

      选择刚刚解压得到的OpenCV库路径下sdk->java,得到结果如下(显示感叹号的原因是因为我已经导入过了):

        

      一次点击下一步,导入成功后,可以看见:

        

      然后需要添加依赖,点击File->Project Structure,点击Module下App,选择Dependencies:

        

      添加依赖之后,就可以在项目中引用OpenCV相关API代码了,如果你此刻运行App,它就会提示你安装OpenCV Manager。这对于我们来说不算集成成功,因为自己的APP就无法独立安装,必须依赖OpenCV Manager这个apk文件才可以运行。

    接下来说如何解决该问题:

      首先OpenCVLibrary的build.gradle文件中的一下参数修改为与app的build.gradle文件中相同(红框标出的部分为需要修改的部分):

        

      然后将下载解压得到的OpenCV4Android库目录下的sdk->native->libs中的文件全部拷贝到项目的lib目录下:

        

      然后在app的gradle文件中添加(红框标出部分为本次添加内容):

        

      gradle的完整代码如下:

     1 apply plugin: 'com.android.application'
     2 
     3 android {
     4     compileSdkVersion 25
     5     buildToolsVersion "27.0.1"
     6     defaultConfig {
     7         applicationId "com.example.easysilkver01"
     8         minSdkVersion 15
     9         targetSdkVersion 25
    10         versionCode 1
    11         versionName "1.0"
    12         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    13     }
    14 
    15     useLibrary 'org.apache.http.legacy'
    16 
    17     buildTypes {
    18         release {
    19             minifyEnabled false
    20             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    21         }
    22     }
    23 }
    24 
    25 dependencies {
    26     compile 'com.android.support:design:25.3.1'
    27     compile fileTree(include: ['*.jar'], dir: 'libs')
    28     compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    29     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    30         exclude group: 'com.android.support', module: 'support-annotations'
    31     })
    32     compile 'com.android.support:appcompat-v7:25.3.1'
    33     testCompile 'junit:junit:4.12'
    34     compile project(':openCVLibrary320')
    35 }
    36 
    37 task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
    38     destinationDir file("$buildDir/native-libs")
    39     baseName 'native-libs'
    40     from fileTree(dir: 'libs', include: '**/*.so')
    41     into 'lib/'
    42 }
    43 
    44 tasks.withType(JavaCompile) {
    45     compileTask -> compileTask.dependsOn(nativeLibsToJar)
    46 }

      至此,Android中OpenCV(不包含nonfree部分)就完全配置好啦,这样既避免了NDK繁琐又不用依赖OpenCV Manager第三方APP,你的APP就可以直接使用OpenCV了。需要注意的是:此配置方式OpenCV加载必须通过静态加载方式。

    最后:

      代码demo就不贴了,网上帖子多的很,贴一下导入OpenCV库的加载方法吧:

     1     /**
     2      * 导入OpenCV库
     3      */
     4     private void initLoadOpenCVLibs() {
     5         boolean success = OpenCVLoader.initDebug();
     6         if (success) {
     7             Log.d(TAG, "initLoadOpenCVLibs:OpenCV加载成功!");
     8         } else {
     9             Log.d(TAG, "initLoadOpenCVLibs:OpenCV加载失败!");
    10         }
    11     }

      最后,感谢http://blog.csdn.net/jia20003/article/details/53126321#reply的文章,帮我当初解决了这个问题,但是他的文章中配置过程有一个地方说的有问题,所以当时我也是捣鼓了蛮久,幸运的是这篇文章中我已经纠正过来啦。

  • 相关阅读:
    windows 运行hadoop的WordCount报nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)
    java对象比较==和equals的区别
    java poi处理excel多sheet并实现排序
    hadoop-eclipse插件编译及windows下运行wordcount项目
    hadoop动态添加删除节点datanode及恢复
    hadoop的client搭建-即集群外主机访问hadoop
    appium+python,app自动化测试框架
    [adb]查看 App的appPackage和appActivity
    Django基础(二)
    JavaScript、Dom和jQuery
  • 原文地址:https://www.cnblogs.com/fx-blog/p/8205787.html
Copyright © 2011-2022 走看看