【配置教程】新版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. 设置语言为 Java 或 Kotlin(建议使用 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());
}

九、参考链接

相关推荐
江湖有缘6 分钟前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
lucas_AI9 分钟前
Claude Code 的「项目经理」上班了:协调器主动汇报,并行 AI 工人不等你催
人工智能
zhaoshuzhaoshu32 分钟前
NPU(神经网络处理单元)详细解析
人工智能
在所不辞兄33 分钟前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
Flynn Liang41 分钟前
LLM 应用安全:Prompt 注入、越权与输入输出护栏
java·人工智能·大模型·langchain4j·llm 安全·prompt 注入·guardrail
吴佳浩5 小时前
《拆解全球最火 AI 开源项目》第一季 · REA
人工智能
AllData公司负责人8 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
泯泷10 小时前
让 Agent 分清“马上办、等一等、顺手办”
人工智能·llm·agent
鲜于言悠90511 小时前
Claude Fable 5.2 登场,专治复杂推理与长任务
人工智能
联犀11 小时前
如何工程化降低语音交互AI设备的延迟(小智ai,芙崽这样的ai设备)
人工智能