重要的事说三遍:
使用新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.文件位于
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='
也可以将上面的声明放入gradle.properties 件(主目录中的文件),但没有“def”和撇号('):
opencvsdk=
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文件:
修改为
在的后面添加:
运行。 成功!
------------------------------------
最后,介绍更简单的方法:
打开Android studio,选“打开已经存在的Android studio项目。
找到OpenCV-android-sdk文件夹,选择“samples”。所有的示例都运行良好!