{"id":16517250,"url":"https://github.com/vietanhdev/native-opencv-android","last_synced_at":"2025-10-26T16:34:27.079Z","repository":{"id":79025296,"uuid":"364970197","full_name":"vietanhdev/native-opencv-android","owner":"vietanhdev","description":null,"archived":false,"fork":false,"pushed_at":"2021-05-06T16:18:53.000Z","size":617,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-13T06:42:14.525Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vietanhdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-06T16:18:52.000Z","updated_at":"2021-05-06T16:18:56.000Z","dependencies_parsed_at":"2023-03-24T07:18:03.846Z","dependency_job_id":null,"html_url":"https://github.com/vietanhdev/native-opencv-android","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"VlSomers/native-opencv-android-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vietanhdev%2Fnative-opencv-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vietanhdev%2Fnative-opencv-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vietanhdev%2Fnative-opencv-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vietanhdev%2Fnative-opencv-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vietanhdev","download_url":"https://codeload.github.com/vietanhdev/native-opencv-android/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241559361,"owners_count":19982251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T16:29:38.081Z","updated_at":"2025-10-26T16:34:26.993Z","avatar_url":"https://github.com/vietanhdev.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n# Native OpenCV for Android with Android NDK\n\nA tutorial for setting up OpenCV 4.5.0 (and other 4.x.y versions) for Android in [Android Studio](https://developer.android.com/studio) with Native Development Kit (NDK) support.\n[Android NDK](https://developer.android.com/ndk) enables you to implement your [OpenCV](https://opencv.org) image processing pipeline in C++ and call that C++ code from Android Kotlin/Java code through JNI ([Java Native Interface](https://en.wikipedia.org/wiki/Java_Native_Interface)).\n\nThis sample Android application displays a live camera feed with an OpenCV *adaptive threshold* filter applied on each frame. The OpenCV *adaptive threshold* call is performed in C++.\n\n## Setup\n\n| Tool      | Version |\n| ---       |  ---    |\n| [OpenCV](https://opencv.org) | 4.5.0\n| [Android Studio](https://developer.android.com/studio) | 4.1.0\n| [Android Build Tool](https://developer.android.com/about) | 29.0.3\n| [Android NDK](https://developer.android.com/ndk/guides) | r21d\n| [Kotlin](https://kotlinlang.org/docs/reference/) | 1.3.72\n| [Gradle](https://gradle.org) | 6.5.0\n| Mac OS | 10.15.7\n\n## How to use this repository\n\n1. [Download and Install Android Studio](https://developer.android.com/studio)\n \n2. [Install NDK, CMake and LLDB](https://developer.android.com/studio/projects/install-ndk.md)\n \n3. Clone this repository as an Android Studio project :\n     * In Android Studio, click on `File -\u003e New -\u003e Project from Version Control -\u003e Git`\n     * Paste this repository *Github URL*, choose a *project directory* and click next.\n     \n4. Install *OpenCV Android release* :\n    * Download [OpenCV 4.5.0 Android release](https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download) or download latest available Android release on [OpenCV website](https://opencv.org/releases/).\n    * Unzip downloaded file and put **OpenCV-android-sdk** directory on a path of your choice.\n \n5. Link your *Android Studio* project to the *OpenCV Android SDK* you just downloaded :\n    * Open [gradle.properties](gradle.properties) file and edit following line with your own *OpenCV Android SDK* directory path :\n    \n          opencvsdk=/Users/Example/Downloads/OpenCV-android-sdk\n          \n6. Sync Gradle and run the application on your Android Device!\n\nNote: MainActivity is written in Kotlin but you can comment out the [Kotlin](/app/src/main/kotlin/com/example/nativeopencvandroidtemplate/MainActivity.kt) file and uncomment the [Java](/app/src/main/java/com/example/nativeopencvandroidtemplate/MainActivity.java) file to use Java.\n\n## Bootstrap a new Android project with Native OpenCV support\n\nHere are the steps to follow to create a new Android Studio project with native OpenCV support :\n\n1. [Download and Install Android Studio](https://developer.android.com/studio)\n\n2. [Install NDK, CMake and LLDB](https://developer.android.com/studio/projects/install-ndk.md)\n\n3. Create a new *Native Android Studio project* :\n    * Select `File -\u003e New -\u003e New Project...` from the main menu.\n    * Click `Phone and Tablet tab`, select `Native C++` and click next.\n    * Choose an `Application Name`, select your favorite `language` (Kotlin or Java), choose `Minimum API level` (28 here) and select next.\n    * Choose `Toolchain default` as *C++ standard* and click Finish.\n    \n4. Install *OpenCV Android release* :\n    * Download [OpenCV 4.5.0 Android release](https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download) or download latest available Android release on [OpenCV website](https://opencv.org/releases/).\n    * Unzip downloaded file and put **OpenCV-android-sdk** directory on a path of your choice.\n    \n5. Add *OpenCV Android SDK* as a module into your project :\n    * Open [setting.gradle](settings.gradle) file and append these two lines.\n    \n          include ':opencv'\n          project(':opencv').projectDir = new File(opencvsdk + '/sdk')\n        \n    * Open [gradle.properties](gradle.properties) file and append following line. Do not forget to use correct *OpenCV Android SDK* path for your machine. \n    \n          opencvsdk=/Users/Example/Downloads/OpenCV-android-sdk\n          \n    * Open [build.gradle](app/build.gradle) file and add `implementation project(path: ':opencv')` to dependencies section :\n    \n          dependencies {\n              ...\n              implementation project(path: ':opencv')\n          }\n    \n    * Click on `File -\u003e Sync Project with Gradle Files`.\n    \n6. Add following config to app [build.gradle](app/build.gradle) file :\n    * In `android -\u003e defaultConfig -\u003e externalNativeBuild -\u003e cmake` section, put these three lines :\n    \n          cppFlags \"-frtti -fexceptions\"\n          abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'\n          arguments \"-DOpenCV_DIR=\" + opencvsdk + \"/sdk/native\"\n        \n7. Add following config to [CMakeLists.txt](app/src/main/cpp/CMakeLists.txt) file :\n    * Before `add_library` instruction, add three following lines :\n    \n          include_directories(${OpenCV_DIR}/jni/include)\n          add_library( lib_opencv SHARED IMPORTED )\n          set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${OpenCV_DIR}/libs/${ANDROID_ABI}/libopencv_java4.so)\n        \n    * In `target_link_libraries` instruction arguments, add following line :\n    \n          lib_opencv\n        \n8. Add following *permissions* to your [AndroidManifest.xml](app/src/main/AndroidManifest.xml) file :\n\n       \u003cuses-permission android:name=\"android.permission.CAMERA\"/\u003e\n       \u003cuses-feature android:name=\"android.hardware.camera\"/\u003e\n       \u003cuses-feature android:name=\"android.hardware.camera.autofocus\"/\u003e\n       \u003cuses-feature android:name=\"android.hardware.camera.front\"/\u003e\n       \u003cuses-feature android:name=\"android.hardware.camera.front.autofocus\"/\u003e\n    \n9. Create your *MainActivity* :\n    * You can copy paste MainActivity [Kotlin](/app/src/main/kotlin/com/example/nativeopencvandroidtemplate/MainActivity.kt) or [Java](/app/src/main/java/com/example/nativeopencvandroidtemplate/MainActivity.java) file. Do not forget to adapt package name.\n    \n10. Create your *activity_main.xml* :\n    * You can copy paste [activity_main.xml](/app/src/main/res/layout/activity_main.xml) file.\n    \n11. Add native code in *native-lib.cpp* :\n    * You can copy paste [native-lib.cpp](app/src/main/cpp/native-lib.cpp) file. Do not forget to adapt the method name : \n    `Java_com_example_nativeopencvtemplate_MainActivity_adaptiveThresholdFromJNI`\n    should be replaced with \n    `Java_\u003cmain-activity-package-name-with-underscores\u003e_MainActivity_adaptiveThresholdFromJNI`.\n    \n12. Sync Gradle and run the application on your Android Device!\n\n\n\n\n\n![alt text](images/native-opencv-android-template-screenshot.jpg)\n\n\n## Questions and Remarks\n\nIf you have any question or remark regarding this tutorial, feel free to open an issue.\n\n## Acknowledgments\n\nThis tutorial was inspired by this very good [Github repository](https://github.com/leadrien/opencv_native_androidstudio).\n\n## Keywords\n\nTutorial, Template, OpenCV 4, Android, Android Studio, Native, NDK, Native Development Kit, JNI, Java Native Interface, C++, Kotlin, Java\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvietanhdev%2Fnative-opencv-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvietanhdev%2Fnative-opencv-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvietanhdev%2Fnative-opencv-android/lists"}