This application is a sample Android Studio project with native OpenCV.
It gets the camera frames, make JNI calls with its gray matrices references as parameters, add some random noise to the images from a C++ method, and render the generated frames.
It works with Android Studio 3+
Last included OpenCV version: 3.4
Here is how to use this project to run native OpenCV code.
- Make sure you have Android SDK up to date, with NDK installed and CMake
- Download latest OpenCV SDK for Android from OpenCV.org and decompress the zip file.
- Clone this project
- Create a symlink named
jniLibsinapp/src/mainthat points toYOUR_OPENCV_SDK/sdk/native/libs - In
app/CMakeLists.txtchange line 9 to points toYOUR_OPENCV_SDK/sdk/native/jni/include - Sync gradle
- Run the application
Here is how I made this project. If you simply want to run openCV with NDK support, use the previous Usage chapter. If you want to build the full project from scratch, you can follow the steps in this chapter.
Make sure you have Android SDK up to date, with NDK installed
Download latest OpenCV SDK for Android from OpenCV.org and decompress the zip file.
Create a new Android Studio project
- Check Include C++ Support
- Choose empty Activity
- In C++ Support, you can check -fexceptions and -frtti
Import OpenCV library module
- New -> Import Module
- Choose the
YOUR_OPENCV_SDK/sdk/javafolder - Unckeck replace jar, unckeck replace lib, unckeck create gradle-style
Set the OpenCV library module up to fit your SDK
Edit
openCVLibrary/build.gradleto fit your SDK:compileSdkVersion 27 defaultConfig { minSdkVersion 19 targetSdkVersion 27 }Add OpenCV module dependency in your app module
File -> Project structure -> Module app -> Dependencies tab -> New module dependency -> choose OpenCV library module
Make a symlink named
jniLibsinapp/src/mainthat points toYOUR_OPENCV_SDK/sdk/native/libsSet the app build.gradle
Add abiFilters
externalNativeBuild { cmake { cppFlags "-frtti -fexceptions" abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' } }Add openCV jniLibs directory to point to the symlink
sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } }
See build.gradle
Configure the
CMakeLists.txtfileAfter the
cmake_minimum_required, addinclude_directories(YOUR_OPENCV_SDK/sdk/native/jni/include) add_library( lib_opencv SHARED IMPORTED ) set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)At the end of the file add
lib_opencvto thetarget_link_librarieslist
Grant camera permission
Add the following lines in the
AndroidManifest.xmlfile<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera.autofocus"/> <uses-feature android:name="android.hardware.camera.front"/> <uses-feature android:name="android.hardware.camera.front.autofocus"/>
Add OpenCV code