【配置教程】新版OpenCV+Android Studio环境配置(4.11测试通过)

在 Android Studio 中连接新版 OpenCV(4.11)

很多教程都无法正常在新版工作,因此这里我更新一下教程。后面会再写一个如何加入cpp的教程。


一、准备工作

  1. 下载 OpenCV Android SDK

    • 访问:https://opencv.org/releases/
    • 下载如 OpenCV-4.x.x-android-sdk.zip
    • 解压至任意目录,例如:~/Android/OpenCV-android-sdk
  2. 安装 Android Studio


二、新建 Android 项目

  1. 打开 Android Studio,选择 New Project
  2. 使用 Empty Activity
  3. 输入项目名,例如 OpenCVTest
  4. 设置语言为 JavaKotlin(建议使用 Java)
  5. 选择合适的最小 API Level(建议 API 21 或更高)

三、集成 OpenCV 库

方式一:使用 OpenCV SDK 模块(推荐)

  1. 导入 OpenCV SDK 模块

    • 在 Android Studio 中右键项目根目录 > New > Import Module
    • 路径选择:<OpenCV-android-sdk>/sdk/java
    • Module name 保持默认::openCVLibrary4
  2. 将 OpenCV 模块添加到你的 app 中

    编辑 settings.gradle

    gradle 复制代码
    include ':app', ':openCVLibrary4'

    编辑 app/build.gradle

    gradle 复制代码
    dependencies {
        implementation project(':openCVLibrary4')
    }

四、配置 Native 支持(可选)

如果你需要使用 OpenCV 的 C++ 接口(如通过 JNI),可添加 NDK 支持。

  1. 启用 C++ 支持

    • 在新建项目时勾选"Include C++ Support",或
    • 手动添加 CMakeLists.txt 与 JNI 源码
  2. 编辑 CMakeLists.txt

    cmake 复制代码
    cmake_minimum_required(VERSION 3.4.1)
    
    set(OpenCV_DIR <OpenCV-android-sdk>/sdk/native/jni)
    find_package(OpenCV REQUIRED)
    
    add_library(native-lib SHARED native-lib.cpp)
    
    target_link_libraries(native-lib ${OpenCV_LIBS} log)
  3. 配置 build.gradle

    gradle 复制代码
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
    
    sourceSets {
        main {
            jniLibs.srcDirs = ['<OpenCV-android-sdk>/sdk/native/libs']
        }
    }

五、加载 OpenCV 库

MainActivity.java 中添加如下代码:

java 复制代码
import org.opencv.android.OpenCVLoader;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "OpenCV";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        if (!OpenCVLoader.initDebug()) {
            Log.e(TAG, "OpenCV initialization failed!");
            Toast.makeText(this, "OpenCV initialization failed!", Toast.LENGTH_LONG).show();
        } else {
            Log.i(TAG, "OpenCV loaded successfully");
        }
    }
}

六、验证配置

  1. 运行 app,查看 Logcat 是否输出:

    复制代码
    OpenCV loaded successfully
  2. 若提示失败,确认:

    • jniLibs 是否包含了合适架构的 .so 文件
    • OpenCVLoader.initDebug() 被正确调用

七、调试和注意事项

  • initDebug() 仅适用于调试模式。发布版本请使用 OpenCV Manager 或静态初始化。

  • 可用命令确认 .so 文件架构是否匹配:

    bash 复制代码
    file libopencv_java4.so
  • 若使用 Kotlin,语法略有差异,注意 API 兼容性。


八、附录

JNI 示例:

cpp 复制代码
#include <jni.h>
#include <string>
#include <opencv2/core.hpp>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_opencvtest_MainActivity_stringFromJNI(
    JNIEnv* env,
    jobject /* this */) {
    cv::Mat mat = cv::Mat::eye(3, 3, CV_8UC1);
    std::string msg = "OpenCV Mat:\n" + std::to_string(mat.rows) + "x" + std::to_string(mat.cols);
    return env->NewStringUTF(msg.c_str());
}

九、参考链接

相关推荐
Codebee1 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º2 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys2 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56782 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子2 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能3 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144873 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile3 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5773 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
盟接之桥3 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造