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的文章,帮我当初解决了这个问题,但是他的文章中配置过程有一个地方说的有问题,所以当时我也是捣鼓了蛮久,幸运的是这篇文章中我已经纠正过来啦。

  • 相关阅读:
    mysql 函数 存储过程 事件(event) job 模板
    protobuf 无proto 解码 decode 语言 java python
    mitmproxy fiddler 抓包 填坑
    android adb 常用命令
    android机器人 模拟 踩坑过程
    RabbitMQ添加新用户并支持远程访问
    Windows下RabbitMQ安装及配置
    Java mybatis mysql 常用数据类型对应关系
    easyExcel 踩坑
    linux防火墙查看状态firewall、iptable
  • 原文地址:https://www.cnblogs.com/fx-blog/p/8205787.html
Copyright © 2011-2022 走看看