OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)

这篇具有很好参考价值的文章主要介绍了OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.下载OpenCV的SDK

2.创建Android Native C++项目

3.Android项目中导入OpenCV工程

4.导入OpenCV的库文件

5.实现opencv高斯模糊图像处理的demo


要在Android Studio中配置使用OpenCV库的C++方法,需要完成以下步骤:

1.下载OpenCV的SDK

首先,您可以从OpenCV官方网站(Releases - OpenCV )下载适用于Android的最新版本的OpenCV库,然后解压得到 OpenCV-android-sdk文件夹。 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

把解压得到的OpenCV-android-sdk文件夹放到D盘。

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

2.创建Android Native C++项目

 配置开发环境NDK:打开Android Studio,点击“Tools”,转到“SDK Manager”,选择“SDK Tools”选项卡,并选中“NDK”和“CMake”进行安装。

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

 点击File-->New-->New Project,选择最后一项的Native C++,点击next

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

进入配置页面,默认,点击Next

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

C++标准根据自身需求设置,这里我选择默认工具链,点击Finish

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

项目建成后的项目是这样的,我们可以在真机/模拟器上运行测试一下。

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

运行成功

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

3.Android项目中导入OpenCV工程

将OpenCV库作为本地模块导入:在Android Studio中选择File -> New -> Import Module。

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

然后选择上面解压得到的OpenCV-android-sdk文件夹中的sdk文件夹,把Module name改为opencv。android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

导入成功,出现新的工程opencv

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

导入成功之后,会出现报错提示你修改,只需要进去opencv工程的build.gradle里面改一下,让compileSdkVersion,minSdkVersion和targetSdkVersionp与app工程的build.gradle的一致。

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

然后,在这里我出现错误;

Build file 'D:\DownLoad\Android\javadata\MyApplication7\opencv\build.gradle' line: 92

A problem occurred evaluating project ':opencv'.
> Plugin with id 'kotlin-android' not found.

 解决方法:

删掉:apply plugin: 'kotlin-android'

点击make project,不报错,修改好的opencv工程build.gradle如下图所示:

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

点击File->Project Structure->Dependencies->app->右边的+->3 Module Dependency

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

 选择opencv,点击OKandroid studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

点击make project,如果不报错,则成功了。

4.导入OpenCV的库文件

1、把OpenCV-android-sdk下的OpenCV-android-sdk/sdk/native/jni/include文件夹拷贝到你项目

src/main下面,并修改名字为opencv_include。

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

2、把OpenCV-android-sdk下的OpenCV-android-sdk/sdk/native/libs文件夹拷贝到你项目src/main/

下面,并修改名字为opencv_lib。

android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

如图所示

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境

在您的Android项目src/main/cpp目录下的的CMakeLists.txt文件中,添加对OpenCV库的引用,配置如下:

cmake_minimum_required(VERSION 3.22.1)

project("myapplication")

add_library( # Sets the name of the library.
        myapplication
        SHARED
        native-lib.cpp)

#opencv
set(OPENCV_LIBS_DIR ${CMAKE_SOURCE_DIR}/../opencv_include)
set(OPENCV_LIBS ${CMAKE_SOURCE_DIR}/../opencv_lib)

add_library(libopencv_java4
        SHARED
        IMPORTED )
set_target_properties(libopencv_java4
        PROPERTIES IMPORTED_LOCATION
        ${OPENCV_LIBS}/${ANDROID_ABI}/libopencv_java4.so )

#指定引入头文件目录
include_directories(${OPENCV_LIBS_DIR})

find_library( # Sets the name of the path variable.
        log-lib
        log)

target_link_libraries( # Specifies the target library.
        myapplication
        libopencv_java4
        jnigraphics #JNI层,添加bitmap支持
        ${log-lib})
5.实现opencv高斯模糊图像处理的demo

在native-lib.cpp中调用opencv库实现图像处理的C/C++函数。

#include <jni.h>
#include <string>
#include <android/bitmap.h>
#include <opencv2/opencv.hpp>
using namespace cv;
extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_opencv_1test(JNIEnv *env, jclass clazz,
                                                         jobject bitmap) {
    AndroidBitmapInfo info;
    void *pixels;

    CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
    //判断图片是位图格式有RGB_565 、RGBA_8888
    CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
              info.format == ANDROID_BITMAP_FORMAT_RGB_565);
    CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
    CV_Assert(pixels);

    //将bitmap转化为Mat类
    Mat image(info.height, info.width, CV_8UC4, pixels);
    // 高斯模糊
    GaussianBlur(image, image, Size(101, 101), 0);
    
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/Original_image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="高斯模糊"/>
    <ImageView
        android:id="@+id/Image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
       />
</LinearLayout>

在您的Java代码中,使用JNI接口来调用您在native-lib.cpp中实现的C/C++函数。


public class MainActivity extends AppCompatActivity {

      static {
        System.loadLibrary("myapplication");
    }
    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        Bitmap Original_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img);

        ImageView Original_image=findViewById(R.id.Original_image);
        Original_image.setImageBitmap(Original_bitmap);
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                opencv_test(bitmap);
                ImageView Image=findViewById(R.id.Image);
                Image.setImageBitmap(bitmap);
            }
        });

    }
    public static native void opencv_test(Object bitmap);
}

运行效果图:

 android studio添加opencv库,Android之OpenCV,Android,opencv,配置环境文章来源地址https://www.toymoban.com/news/detail-775074.html

到了这里,关于OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [亲测有效]android studio 连接不上模拟器夜神 雷电 解决方法

    A. android studio 连接不上模拟器 B. adb devices 显示没有连接设备 C. android studio 中有时候可以连接推送安装应用,但是日志查看窗口显示设备下线   等等情况,都是一个问题: adb 版本不一致 电脑主机上adb 版本与模拟器、调试设备中集成的adb 版本不一致 比如: 夜神模拟器,do

    2024年01月16日
    浏览(59)
  • 保姆级别——Android Studio安装教程&环境变量配置

    1.1 官网下载地址: Download Android Studio and SDK tools  |  Android Developers 1.2 找到下载好的安装包,双击,再按以下步骤操作。 1.3 这里点击Browse更换安装路径(推荐),也可以安装在默认路径下。 1.4 安装完成后勾选Start Android Studio启动并点击finish。  1.5 启动完成选择不导入配置,然

    2024年02月16日
    浏览(54)
  • android studio JNI开发

    一、JNI的作用: 1.使Java与本地其他类型语言(C、C++)交互; 2.在Java代码调用C、C++等语言的代码 或者 C、C++调用Java代码。 由于JAVA具有跨平台的特点,所以JAVA与本地代码的交互能力弱,采用JNI特性可以增强JAVA与本地代码的交互能力。 二、AndroidStudion中JNI的使用方法: 1、在

    2024年02月13日
    浏览(56)
  • 安卓Android Studio JNI开发问题澄清与汇总

    AndroidBitmap_lockPixels和AndroidBitmap_unlockPixels的底层逻辑就是在处理bitmap中的数据的时候,把内存锁定,防止像素缓存被改变导致数据变化。 这篇文章有具体介绍相关的机制 下面是Bitmap操作的示例代码: Java端代码: 使用时,可以直接调用NativeUtils中的processImage方法即可。当然,

    2023年04月09日
    浏览(57)
  • Android Studio中使用cmake开发JNI实战

    JNI学习大纲 一、JNI编程入门 二、Android Studio中使用cmake开发JNI实战 第一章节我们介绍了JNI的开发步骤,那这一章节我们就开始在Android Studio中实战一下吧,Let\\\'s Start。 AS中菜单栏选择ToolsSDK Manager 在Android SDK中选择SDK Tools,安装CMake和NDK。 在项目工程下的src/main创建cpp目录,编

    2024年02月14日
    浏览(55)
  • ffmpeg-android studio创建jni项目

    android - defaultConfig -externalNativeBuild - cmake 配置c++使用标准 android - externalNativeBuild - cmake 1 、配置cmake文件路径 2、配置cmake的版本 cmake_minimum_required cmake最低版本要求 project 设置项目名称 add_library 添加库并设置库的源文件 1、 Normal Libraries name:库名称 STATIC|SHARED|MODULE:库类型(静态

    2024年02月09日
    浏览(45)
  • 学习笔记—Android studio导入OpenCV配置使用

    官网下载sdk,打开opencv官网,点击Android,完成后解压 https://opencv.org/ 解压后,文件夹下有这些文件 samples Android代码工程 sdk 包含opencv的Java的接口和JNI接口等 打开Android studio,选择模板,这时选择最后一项Native C++,然后进入配置界面。 这里注意你下载的Android-sdk版本来选择

    2024年02月07日
    浏览(52)
  • 利用android studio 生成 JNI需要的动态库so文件 图文详解

    到官网下载,此处不再陈述 JNI 是JDK里的内容,电脑上正确安装并配置JDK即可。 直接在Android studio下载(File----Settings) 工具一: AndroidStudio下载安装cmake(调试Native时会使用到LLDB,请一同勾选下载安装) 工具二: 用NDK的脚本工具使用ndk-build 新建项目,选择Native C++,如下图所

    2024年02月09日
    浏览(87)
  • Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

    前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下\\\"通俗易懂,风趣幽默\\\",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 第一步首先配置Android studio的NDK开发环境,首先在Android studio中下载NDK包 第二步在local.properties文件中,配置对应的NDK路径 第三

    2024年02月12日
    浏览(37)
  • Android Google登录并获取token(亲测有效)

    背景: Android 需要用到Google的登录授权,用去token给到服务器,服务器再通过token去获取用户信息,实现第三方登录。 我们通过登录之后的email来获取token,不需要server_clientId;如果用server_clientId还需要在google的控制台配置测试的账号,否则登录的时候会返回错误码10. 实现步骤

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包