因公司业务需求,需要涉及到计算机视觉的内容,出于增强记忆和乐于分享的目的,在此记录下本技术完整流程!
首先,亮一下本屌的开发工具启动界面,本篇就算正式开始了!
一、android studio配置
1.首先创建一个没有什么卵用的空项目
2.首先确保,你的android studio中安装了sdk 和ndk 以及cmake
3.按住快捷键Ctrl+Shift+Alt+S,检查NDK是否配置成功
4.然后去opencv官网下载(这里我使用的版本是3.4.6,各位随意,大同小异):https://opencv.org/releases/page/2/
把windows和android版本都下载下来,windows版本后面有用,做重点讲解
两种都下载完成后,为以下内容
解压zip
复制../OpenCV-android-sdk/sdk/native/libs/libopencv_java3.so到项目下../opencvdemo/app/src/main/jniLibs/armeabi-v7a/
复制../OpenCV-android-sdk/sdk/native/jni/include下文件夹到项目下../opencvdemo/app/src/main/cpp/include/
在项目../opencvdemo/app/下创建文件CMakeLists.txt,加入如下代码:
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp)
include_directories(src/main/cpp/include)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}")
target_link_libraries( native-lib log opencv_java3 android )
在项目../opencvdemo/app/build.gradle文件中,配置如下
android {
....
defaultConfig {
....
externalNativeBuild {
cmake {
cppFlags ""
abiFilters "armeabi-v7a"
arguments '-DANDROID_STL=gnustl_static'
}
}
ndk {
abiFilters 'armeabi-v7a'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
在项目../opencvdemo/app/src/main/cpp/下创建cpp文件,取名native-lib.cpp,加入如下代码
#include <jni.h>
#include <opencv2/opencv.hpp>
#include <android/native_window_jni.h>
extern "C"
JNIEXPORT void JNICALL
Java_com_liera_opencvdemo_MainActivity_matSource(JNIEnv *env, jobject instance) {
}
到此,opencv配置基本结束,下一章节我们讲如何配置windows的opencv环境。(注:因毕竟android上开发opencv实时预览不太方便,所以我们采用在windows上开发运行项目,运行调试通过后一并移植到android项目中)。
补充:
使用NDK 18rc以上的NDK编译带OpenCV的工程时会遇到编译问题。
android undefined reference to 'std::basic_ostream<char, std::char_traits<char> >
有两种解决办法:
(1)在gradle中加入如下代码,这只对NDK 18rc以下的版本有效
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_STL=gnustl_static"
}
}
(2)对NDK 18rc以上的版本,gnustl_static已经不再支持,只能重新编译OpenCV
cd $OPENCV_SRC
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_DIR/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=android-24
make install
cd install #the sdk will be here...
本章完。