zoukankan      html  css  js  c++  java
  • Android Studio 配置 OpenCV4+

    https://stackoverflow.com/questions/63382489/cant-import-opencv-module-in-android-studio

    1. 新建Project,选择Native C++。

    2. 下载并解压OpenCV Android SDK,如OpenCV4.5.0 Android SDK。

    3. File/New/Import Module, 选择sdk文件夹(不是sdk/java文件夹!)

    4. File -> Project Structure -> Dependencies -> Module Dependency -> add OpenCV as 'Module Dependency' of 'app'

    5. Clean Project

    6. 注意代码中需要OpenCVLoader。此时可在Java中使用OpenCV。

     1 package com.example.testopencv;
     2 
     3 import androidx.appcompat.app.AppCompatActivity;
     4 
     5 import android.os.Bundle;
     6 import android.util.Log;
     7 import android.widget.TextView;
     8 
     9 import org.opencv.android.OpenCVLoader;
    10 import org.opencv.core.Mat;
    11 import org.opencv.core.CvType;
    12 
    13 public class MainActivity extends AppCompatActivity {
    14     private static final String TAG = "main_activity";
    15     // Used to load the 'native-lib' library on application startup.
    16     static {
    17         if (!OpenCVLoader.initDebug()) {
    18             // Handle initialization error
    19             Log.d(TAG, "OPENCV DİD NOT LOAD");
    20         }
    21         System.loadLibrary("native-lib");
    22     }
    23 
    24     @Override
    25     protected void onCreate(Bundle savedInstanceState) {
    26         super.onCreate(savedInstanceState);
    27         setContentView(R.layout.activity_main);
    28         Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
    29         // Example of a call to a native method
    30         TextView tv = findViewById(R.id.sample_text);
    31         tv.setText(stringFromJNI());
    32     }
    33 
    34     /**
    35      * A native method that is implemented by the 'native-lib' native library,
    36      * which is packaged with this application.
    37      */
    38     public native String stringFromJNI();
    39 }

     6. 在native code中使用opencv:

    a. 修改CMakeLists.txt,添加内容:

    1 find_package(OpenCV 4.5 REQUIRED java)
    2 target_link_libraries(native-lib ${OpenCV_LIBRARIES})

    b. 修改cmake相关选项(注意是在defaultConfig中的):

    1 defaultConfig {
    2         ...
    3         externalNativeBuild {
    4             cmake {
    5                 cppFlags "-std=c++14 -frtti -fexceptions"
    6                 arguments "-DOpenCV_DIR=" + "/mnt/ntfs_sdb2/linux_partition/android_projects/TestOpencv/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
    7             }
    8         }

    OpenCV 官方说明

     1 //
     2 // Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
     3 //
     4 // This file is located in <OpenCV-android-sdk>/sdk directory (near 'etc', 'java', 'native' subdirectories)
     5 //
     6 // Add module into Android Studio application project:
     7 //
     8 // - Android Studio way:
     9 //   (will copy almost all OpenCV Android SDK into your project, ~200Mb)
    10 //
    11 //   Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
    12 //   Source directory: select this "sdk" directory
    13 //   Module name: ":opencv"
    14 //
    15 // - or attach library module from OpenCV Android SDK
    16 //   (without copying into application project directory, allow to share the same module between projects)
    17 //
    18 //   Edit "settings.gradle" and add these lines:
    19 //
    20 //   def opencvsdk='<path_to_opencv_android_sdk_rootdir>'
    21 //   // You can put declaration above into gradle.properties file instead (including file in HOME directory),
    22 //   // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_android_sdk_rootdir>
    23 //   include ':opencv'
    24 //   project(':opencv').projectDir = new File(opencvsdk + '/sdk')
    25 //
    26 //
    27 //
    28 // Add dependency into application module:
    29 //
    30 // - Android Studio way:
    31 //   "Open Module Settings" (F4) -> "Dependencies" tab
    32 //
    33 // - or add "project(':opencv')" dependency into app/build.gradle:
    34 //
    35 //   dependencies {
    36 //       implementation fileTree(dir: 'libs', include: ['*.jar'])
    37 //       ...
    38 //       implementation project(':opencv')
    39 //   }
    40 //
    41 //
    42 //
    43 // Load OpenCV native library before using:
    44 //
    45 // - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
    46 //   It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
    47 //
    48 // - use "System.loadLibrary("opencv_java4")" or "OpenCVLoader.initDebug()"
    49 //   TODO: Add accurate API to load OpenCV native library
    50 //
    51 //
    52 //
    53 // Native C++ support (necessary to use OpenCV in native code of application only):
    54 //
    55 // - Use find_package() in app/CMakeLists.txt:
    56 //
    57 //   find_package(OpenCV 3.4 REQUIRED java)
    58 //   ...
    59 //   target_link_libraries(native-lib ${OpenCV_LIBRARIES})
    60 //
    61 // - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
    62 //   Documentation about CMake options: https://developer.android.com/ndk/guides/cmake.html
    63 //
    64 //   defaultConfig {
    65 //       ...
    66 //       externalNativeBuild {
    67 //           cmake {
    68 //               cppFlags "-std=c++11 -frtti -fexceptions"
    69 //               arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
    70 //           }
    71 //       }
    72 //   }
    73 //
    74 // - (optional) Limit/filter ABIs to build ('android' scope of 'app/build.gradle'):
    75 //   Useful information: https://developer.android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
    76 //
    77 //   splits {
    78 //       abi {
    79 //           enable true
    80 //           universalApk false
    81 //           reset()
    82 //           include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
    83 //       }
    84 //   }
    85 //

     https://www.cnblogs.com/imoon22/p/14902927.html

  • 相关阅读:
    ARM启动流程
    ARM机器码分析
    Ubuntu 14.04 dnw配置
    UNIX环境下的消息队列
    UNIX环境下的共享内存
    iptables详解
    iptables 相关名词的解释说明
    sphinx的安装配置和中文分词包coreseek
    linux防火墙iptables封IP,拒绝指定IP和网段的办法
    linux下注销其它用户或者tty的命令
  • 原文地址:https://www.cnblogs.com/imoon22/p/14902277.html
Copyright © 2011-2022 走看看