在Android Studio中 使用 OpenCV

重要的事说三遍:

使用新SDK前,一定要阅读说明文档!

使用新SDK前,一定要阅读说明文档!

使用新SDK前,一定要阅读说明文档!

本来很简单一件事,没看说明就去做了。然后出问题了:

问题1:显示OpenCV Manager package 没发现。是否安装。

问题2:E/OpenCV/StaticHelper: OpenCV error: Cannot load info library for OpenCV
             D/OpenCV/StaticHelper: Library list: ""

问题3:java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
……

百度,得到一堆垃圾经验,浪费了1天时间。最后还是找的说明文档才顺利解决!

说的也是,谁会把说明放到build.gradle文件中呢?“OpenCV android sdk”就是这个干的!(汗!)

去OpenCV官网,下载 android sdk。解压缩到任意文件夹。(具体操作略过……)

打开OpenCV-android-sdk\sdk下的build.gradle文件。以下说明是对该文件描述的具体操作:

首先。新建项目。(任意项目,没有必要如XX说说必须用C++)

以下是关于将OpenCV集成到现有Android Studio应用程序项目的注意事项
1.文件位于<OpenCV android sdk>/sdk目录中(靠近“etc”、“java”、“native”子目录)

2.将模块添加到Android Studio应用程序项目:

方法1.Android Studio方式:将几乎所有的OpenCV Android SDK复制到您的项目中,~200Mb。
     导入模块:菜单->“文件”->“新建”->“新的模块”->“导入渐变项目”: 
     (Import module: Menu -> "File" -> "New" -> "New Module" -> "Import Gradle project":)
      源目录:选择“sdk”目录
     Module name: ":opencv"(没有找到输入框!导入后是sdk。重命名为"opencv",冒号不可以输入。同时在settings.gradle文件中要讲include ':sdk'修改为include ':opencv')
方法2.或者从OpenCV Android SDK附加库模块 
(不复制到应用程序项目目录,允许在项目之间共享同一模块)
 编辑“settings.gradle”并添加以下行:
   def opencvsdk='<path_to_opencv_android_sdk_rootdir>'
 也可以将上面的声明放入gradle.properties 件(主目录中的文件),但没有“def”和撇号('):   

  opencvsdk=<path_opencv_android_sdk_rootdir>
  include ':opencv'
  project(':opencv').projectDir = new File(opencvsdk + '/sdk')

3.将依赖项添加到应用程序模块:
方法1.Android Studio方式:
“打开模块设置”(F4)->“依赖项(Dependencies)”选项卡 
-或将“project(':opencv')”依赖项添加到app/build.gradle
 dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       ...
       implementation project(':opencv')
   }

4.在使用之前加载OpenCV本机库:
-避免使用“OpenCVLoader.initAsync()”方法-已弃用
 它可以加载不同版本的库(来自opencvandroid管理器,它单独安装在设备上)
-使用“System.loadLibrary("opencv_java4")”或“OpenCVLoader.initDebug()”
添加精确的API以加载OpenCV本机库

5.Native C++ 支持(只需在本机应用程序代码中使用OpenCV):
-在app/CMakeLists.txt中使用find_package():
  find_package(OpenCV 3.4 REQUIRED java)
  ...
  target_link_libraries(native-lib ${OpenCV_LIBRARIES})
-在 app/build.gradle添加“OpenCV_DIR”,并启用C++异常/ RTTI支持
有关CMake选项的文档:https://developer.android.com/ndk/guides/cmake.html
 defaultConfig {
       ...
       externalNativeBuild {
           cmake {
               cppFlags "-std=c++11 -frtti -fexceptions"
               arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
           }
       }
   }
-(可选)限制/筛选要构建的abi(app/build.gradle的“android”范围):
https://developer.android.com/studio/build/gradle-tips.html 
(为每个ABI配置单独的APK)
 splits {
      abi {
           enable true
           universalApk false
           reset()
           include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
       }
   }
 

接下来验证:

1.复制\OpenCV-android-sdk\samples\camera-calibration\src\org\opencv\samples\cameracalibration文件夹下全部文件,到前面新建项目的MainActivity.java所在文件夹。

2.修改复制过来的package org.opencv.samples.cameracalibration;为MainActivity.java的package

3.复制\OpenCV-android-sdk\samples\camera-calibration\res文件夹下全部文件到前面新建项目的res文件夹

4.修改项目AndroidManifest.xml文件:

<activity android:name=".MainActivity.java">修改为<activity android:name=".CameraCalibrationActivity">
在</application>的后面添加:
<supports-screens android:resizeable="true"
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:anyDensity="true" />

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
运行。 成功!

------------------------------------

最后,介绍更简单的方法:

打开Android studio,选“打开已经存在的Android studio项目。

找到OpenCV-android-sdk文件夹,选择“samples”。所有的示例都运行良好!

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值