【配置教程】新版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());
}

九、参考链接

相关推荐
小敬爱吃饭3 分钟前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
宸津-代码粉碎机9 分钟前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
老兵发新帖18 分钟前
Hermes:比openclaw更好用的智能体?
人工智能
俊哥V25 分钟前
每日 AI 研究简报 · 2026-04-09
人工智能·ai
MicrosoftReactor27 分钟前
技术速递|使用 Copilot SDK 构建 AI 驱动的 GitHub Issue 分类系统
人工智能·github·copilot
彬sir哥28 分钟前
android studio 如何关闭代理
android studio·proxy
AI成长日志29 分钟前
【GitHub开源项目专栏】AI推理优化框架深度解析(上):vLLM架构设计与核心实现
人工智能·开源·github
数智前线30 分钟前
三次“进窄门”,MiniMax走向AGI深处
人工智能
AI视觉网奇30 分钟前
几何数据集 多模态
人工智能·深度学习
Figo_Cheung31 分钟前
Figo义商本体约束推理引擎 (CRE):基于已部署CRE本地模型的技术实践研究——迈向AGI时代的AI伦理安全框架
人工智能·安全