【图文详解】Android Studio(新版本) 配置OpenCV库,解决出现的各种问题

这篇具有很好参考价值的文章主要介绍了【图文详解】Android Studio(新版本) 配置OpenCV库,解决出现的各种问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

写这篇文章的目的就是记录自己在配置OpenCV库时遇到的问题。在网上查找相关资料时,发现很多Android Studio都是老版本,并且出现的问题都不能被解决。自己在配置过程中出现的问题都进行记录下来并一一解决。

新建项目

点击 New Project

android studio如何引入open cv,Android Studio,opencv,android studio,java

选择界面

android studio如何引入open cv,Android Studio,opencv,android studio,java

配置相关参数

android studio如何引入open cv,Android Studio,opencv,android studio,java

创建成功

android studio如何引入open cv,Android Studio,opencv,android studio,java

确保创建成功(真机测试)

android studio如何引入open cv,Android Studio,opencv,android studio,java

前提:手机要打开开发者模式启用USB调试

手机界面出现 Hello World! 即可成功。

导入 OpenCV 库

先要去OpenCV库官网下载OpenCVAndroid

https://opencv.org/releases/

在这里使用 opencv-4.7.0-android-sdk

解压的OpenCV文件夹

android studio如何引入open cv,Android Studio,opencv,android studio,java

点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹,并将:sdk修改为:opencv

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

等待OpenCV库加载,需要等一会时间

加载好后就会出现下面的错误信息

android studio如何引入open cv,Android Studio,opencv,android studio,java

解决出现的问题1

android studio如何引入open cv,Android Studio,opencv,android studio,java

build.gradle(opencv)

修改版本

这里的版本要与build.gradle(app)的一致

android studio如何引入open cv,Android Studio,opencv,android studio,java

修改后的内容

android studio如何引入open cv,Android Studio,opencv,android studio,java

注释内容

apply plugin: 'kotlin-android' 进行注释

android studio如何引入open cv,Android Studio,opencv,android studio,java

添加 namespace

namespace "org.opencv"

android studio如何引入open cv,Android Studio,opencv,android studio,java

settings.gradle(project)

android studio如何引入open cv,Android Studio,opencv,android studio,java

1 [settings.gradle.ktsOpenCV]里面的内容复制到2 [settings.gradleOpenCV]里面

android studio如何引入open cv,Android Studio,opencv,android studio,java

settings.gradle.ktsOpenCV

android studio如何引入open cv,Android Studio,opencv,android studio,java

settings.gradleOpenCV

注意:在末尾新添加了一行 include(":opencv")

android studio如何引入open cv,Android Studio,opencv,android studio,java

编译代码

现在就没有错误信息了

android studio如何引入open cv,Android Studio,opencv,android studio,java

手机验证

正常显示

android studio如何引入open cv,Android Studio,opencv,android studio,java

应用 OpenCV 库到 APP 中

点击file->project structure ->Dependencies->app->3 Module Dependency然后给opencv打上对勾,应用即可

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

编译代码并应用到APP上会出现下述问题

编译时是没有问题的

android studio如何引入open cv,Android Studio,opencv,android studio,java

导出到APP上出现问题

android studio如何引入open cv,Android Studio,opencv,android studio,java

解决出现的问题2

OpenCVEngineInterface

android studio如何引入open cv,Android Studio,opencv,android studio,java

发现找不到这个类 import org.opencv.engine.OpenCVEngineInterface;

因为SDK 里面提供的是aidl文件路径和Android 默认的不同,但是这个需要新建一个路径 aidl/org/opencv/engine。然后把原SDK路径org.opencv.engine包下的aidl文件拷贝到前面你新建的包

android studio如何引入open cv,Android Studio,opencv,android studio,java

build.gradle(:opencv)

在向build.gradle:opencv中添加下述代码

Plain Text
buildFeatures {
     aidl true
 }

导出到APP上出现下述问题

android studio如何引入open cv,Android Studio,opencv,android studio,java

gradle.properties

gradle.properties中添加下述代码

Plain Text
android.defaults.buildfeatures.buildconfig=true

android studio如何引入open cv,Android Studio,opencv,android studio,java

再次编译并导出到APP上,这次就没有出现任何问题

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

实战

图片转黑白

activity_main.xml

<?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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_marginTop="30dp"
        android:layout_height="300dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_load"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="加载图片"
            android:textSize="25sp"/>
        <Button
            android:id="@+id/btn_gray"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="灰度化"
            android:textSize="25sp"/>
    </LinearLayout>

</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private ImageView img;
    private Button btn_load, btn_gray;
    private Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        img = findViewById(R.id.img);
        btn_load = findViewById(R.id.btn_load);
        btn_gray = findViewById(R.id.btn_gray);

        btn_load.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadImg();
            }
        });

        btn_gray.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                doChgGray();
            }
        });
    }

    private void loadImg(){
        Intent intent = new Intent();
        intent.setType("image/*");

        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,1);
    }

    private void doChgGray(){
        if (bitmap==null){
            return;
        }
        Bitmap bit = bitmap.copy(Bitmap.Config.ARGB_8888,false);
        Mat src = new Mat(bit.getHeight(), bit.getWidth(), CvType.CV_8UC(3));
        Utils.bitmapToMat(bit,src);
        Imgproc.cvtColor(src,src,Imgproc.COLOR_BGR2GRAY);
        Utils.matToBitmap(src,bitmap);
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //用户操作完成,结果返回码是-1
        if (resultCode==RESULT_OK){
            Uri uri = data.getData();
            Log.e("uri",uri.toString());
            ContentResolver cr = this.getContentResolver();
            try {
                bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
                img.setImageBitmap(bitmap);
            }catch(FileNotFoundException ex){
                Log.e("Exception",ex.getMessage(),ex);
            }
        }else{
            //操作错误,或没有选择图片
            Log.i("MainActivity", "操作错误");
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (!OpenCVLoader.initDebug()){
            Log.i("cv","未找到内部的opencv库,使用OpenCV Manager进行初始化");
        }else {
            Log.i("cv","发现了内置的opencv库,使用它来进行操作");
        }
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);

            switch (msg.what){
                case 1:
                    img.setImageBitmap(bitmap);
                    break;
            }
        }
    };
}

手机效果

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

android studio如何引入open cv,Android Studio,opencv,android studio,java

结语

 欢迎关注我的公众号:@AI算法与电子竞赛    

android studio如何引入open cv,Android Studio,opencv,android studio,java

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!文章来源地址https://www.toymoban.com/news/detail-770059.html

到了这里,关于【图文详解】Android Studio(新版本) 配置OpenCV库,解决出现的各种问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android Studio Dolphin 新版Logcat的配置使用

    从之前版本的 Android Studio 更新到 Android Studio Dolphin , Logcat 也有了新变化。一般来说工具更新带来的新特性会使我们的开发更加的便捷和高效。 Logcat 会对日志进行格式化,同时对不同等级的日志以颜色区分,能使我们更方便的查看想要的日志。同时根据个人的使用需求,

    2023年04月13日
    浏览(40)
  • Linux环境下安装并配置最新版Android Studio

    Linux环境下安装并配置最新版Android Studio Android Studio是一款强大的用于开发Android应用程序的集成开发环境。本文将为您提供Linux环境下安装和配置最新版Android Studio的详细步骤。 步骤1:下载Android Studio 首先,我们需要从官方网站下载最新版的Android Studio。请进入Android Studio官方

    2024年02月06日
    浏览(40)
  • 2023最新版Android逆向教程——第1天:Android Studio的安装与配置

    通常情况下,为了提高开发效率,需要使用相应的开发工具。在 Android 发布初期,推荐使用的开发工具是 Eclipse,随着 2015 年 Android Studio 正式版推出,标志着 Google 公司推荐的 Android 开发工具已从 Eclipse 更改为 Android Studio。而且在 Android 的官方网站中,也提供了集成 Android 开

    2024年02月07日
    浏览(38)
  • 小白配置java环境与Android Studio目前最新版下载安装

    Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具,还提供更多可提高 Android 应用构建效率的功能,例如: 基于 Gradle 的灵活构建系统 快速且功能丰富的模拟器 统一的环境(供您开发适用于所有 Android

    2024年02月04日
    浏览(44)
  • 最新版Android studio没有layout文件解决方案

    在 最新版的 Android studio中,创建一个空的活动发生了变化,旧版中可以直接选择empty activity,如  但在新版,empty activity的图标发生了变化 而在最新版的empty activity上我们创建项目后是没有layout文件的,下面的empty views activity才和旧版的empty activity相同。 这表明官方推荐使用C

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

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

    2024年02月09日
    浏览(68)
  • Mac电脑Android Studio和VS Code配置Flutter开发环境(图文超详细)

    官网地址: https://developer.android.google.cn/ 历史版本下载地址: https://developer.android.com/studio/archive?hl=zh-cn 到App Store下载安装最新版本,如果MacOS更新不到13.0以上就无法安装最新的Xcode,只能去下载以前版本的Xcode。 历史版本下载地址: https://developer.apple.com/download/all/?q=Xcode VS C

    2024年02月03日
    浏览(45)
  • 手把手教你games101环境搭建(图文并茂)——Visual Studio安装,Eigen库,Opencv配置

      本文主要内容是games101在本机下的环境搭建,主要有VS的下载与安装,Eigen库的下载与配置,OpenCV的下载与配置,主要解决的bug是LNK2019 无法解析的外部符号 “public: __thiscall cv::Mat::Mat(void)” ,希望能给各位想做games101作业的带来帮助,减少环境配置上的困难,后续也会陆续

    2024年04月12日
    浏览(47)
  • 解决android studio妙明奇妙出现的模拟器

    1,查看设备 adb devices 2, adb命令断开指定的设备 要断开ADB与特定设备的连接,可以使用以下命令:   将 `设备ID` 替换为您要断开连接的设备的实际ID。设备ID可以在运行 `adb devices` 命令时获得。 例如,如果要断开与设备ID为 \\\"192.168.0.100:5555\\\" 的设备的连接,您可以运行以下命

    2024年02月13日
    浏览(37)
  • 新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法

    最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 和以前的用法一样 可以勾选java语言模板 也有

    2024年02月11日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包