Android Studio之opencv极简环境配置(2022-1-30亲测有效)

2023-05-16

Android Studio之opencv环境配置

  • 一、基础创建项目步骤
  • 二、OpenCv环境配置
  • 三、opencv体验

一、基础创建项目步骤

1、先创建一个app项目
在这里插入图片描述
2、选择Basic Activity在这里插入图片描述
3、完成基础项目创建在这里插入图片描述
4、运行一下看看虚拟机是否可用
在这里插入图片描述
5、连接真机测试
因为会用到拍照功能,所以需要使用真机进行测试,接下来配置一下真机进行测试。
参考这篇博客。
①、配置sdk环境变量
需要根据安装Android Studio时候的Sdk以及Sdk文件里面的platform-tools进行配置,我的路径在:

C:\Users\Administrator\AppData\Local\Android\Sdk
C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools

在这里插入图片描述
在这里插入图片描述
配置好后打开cmd输入adb,如果出现以下文字则配置成功。
在这里插入图片描述
②、下载手机对应的Android版本
我的在系统管理->关于手机里面可看到Android版本号,我的为10,下载好对应的Android版本。
在这里插入图片描述
在这里插入图片描述

勾选如图两个,然后点击Apply。等待下载完成,点击finish即可。
③、安装USB Driver到手机
打开开发者选项,一般是设置里面的版本信息->软件版本号点击7下,打开开发者选项后进入,打开usb调试。用 充电线连接到电脑。手机弹出是否允许usb调试,点击允许。
在这里插入图片描述
可以发现,已经安装成功了。

二、OpenCv环境配置

1、增加opencv模块
先到官网进行下载,版本不限,也可到这个博客从网盘下载指定的Opencv库。
下载好后解压,3开头的版本多一个app文件,4开头的版本没有,区别不大,都可以用。很多教程都导入java模块。。。我在这踩坑贼久,最便捷的方法就是直接导入sdk文件夹。

导入模块的方法:
①、新建模块在这里插入图片描述
②、定位到sdk目录
在这里插入图片描述
点击ok就行,就导入成功了。导入成功后会多出一个可展开的opencv文件夹(自己命名的),一定要能展开。然后下面会多一个opencv的build.gradle。
在这里插入图片描述
③、修改build.gradle
把opencv(自己命名的)的build.gradle里面的版本信息改成与app里面的build.gradle版本信息相一致。如下图所示,第一幅图中的三个位置改成第二幅图对应位置的版本号。
在这里插入图片描述
在这里插入图片描述
④、导入
在这里插入图片描述
按照如图所示顺序点击,会出现你刚刚加载的包,选中导入即可,接下来,点击如图所示进行make project,如果不报错,则成功了。在这里插入图片描述

三、opencv体验

1、导入图片资源
直接复制图片,然后粘贴到res下的drawable文件夹下,弹出窗口后直接点击ok。
在这里插入图片描述
2、添加组件
选择activity_main.xml,然后找到button,拖进左边白色框中。
在这里插入图片描述
拖动下面这个。第一个是button按钮,第二个是图片。图片拖入后会让你选择资源,选中导入的图片即可。
在这里插入图片描述
用code预览,发现还没定义,打开MainActivity.java,进行定义
在这里插入图片描述
在这里插入图片描述
进行初始化,先实现一个函数:

private void initLoadOpenCv(){
    boolean success= OpenCVLoader.initDebug();
    if(success){
        Toast.makeText(this.getApplicationContext(), "Loading Opencv Libraries", Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(this.getApplicationContext(), "WARNING:COULD NOT LOAD Opencv Libraries!", Toast.LENGTH_SHORT).show();
    }
}

然后在onCreate函数下调用它。
绑定组件:
在这里插入图片描述
3、与运算例子
与运算的两张图片尺寸大小要相同。
完整的MainActivity.java代码如下:

package com.example.tstapp;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    private Button bt1;
    private ImageButton imgbt1;
    private Mat mat1;
    private Mat mat2;
    private Mat mat3;
    private Bitmap bitmap1;
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mat1.release();
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLoadOpenCv();
        bt1=findViewById(R.id.button);
        imgbt1=findViewById(R.id.imageButton);
        mat1=new Mat();
        mat2=new Mat();
        mat3=new Mat();
        try{
            mat1= Utils.loadResource(this,R.drawable.dog);
            mat2= Utils.loadResource(this,R.drawable.test);
        } catch (IOException e) {
            e.printStackTrace();
        }
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Core.bitwise_and(mat1,mat1,mat3);
                bitmap1=Bitmap.createBitmap(mat3.width(),mat3.height(),Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(mat3,bitmap1);
                imgbt1.setImageBitmap(bitmap1);
            }
        });
    }
    private void initLoadOpenCv(){
        boolean success= OpenCVLoader.initDebug();
        if(success){
            Toast.makeText(this.getApplicationContext(), "Loading Opencv Libraries", Toast.LENGTH_SHORT).show();
        }
        else{
            Toast.makeText(this.getApplicationContext(), "WARNING:COULD NOT LOAD Opencv Libraries!", Toast.LENGTH_SHORT).show();
        }
    }
}

其中的dog是导入的图片资源,上面代码进行的是同一张图片与运算,效果如下:
按钮点击前:
在这里插入图片描述

按钮点击后:在这里插入图片描述

4、灰度转换例子
按钮点击函数改为如下函数。

        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Imgproc.cvtColor(mat1,mat3,Imgproc.COLOR_BGRA2GRAY);
                bitmap1=Bitmap.createBitmap(mat3.width(),mat3.height(),Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(mat3,bitmap1);
                imgbt1.setImageBitmap(bitmap1);
            }
        });

在这里插入图片描述

至此,算把环境彻底跑通了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio之opencv极简环境配置(2022-1-30亲测有效) 的相关文章

随机推荐

  • 重载new和delete检测内存泄漏

    内存泄漏就是new出来的内存没有通过delete合理的释放 重载new和delete检测内存泄漏原理是 xff1a 在重载的new中记录内存分配情况 xff0c 在重载的delete中删除内存分配记录 xff0c 从而跟踪所有内存分配信息
  • 《Effective C++》读后感

    几天前 xff0c 我曾在微信朋友圈中发了一条消息 xff1a 和大牛之间的差距就是这一个书架 图片来自于微信公众号 二爷鉴书 的分享 我时常纠结于自己的技术为什么进步的这么慢 xff0c 大概就是书读的太少 思考的太少 Effective
  • 《模仿游戏》观后感

    xfeff xfeff 几天前 xff0c 一个朋友让我给他推荐一部电影 xff0c 我思来想去 xff0c 推荐了 模仿游戏 这部电影讲述的是 计算机科学之父 艾伦 图灵在二战期间与其团队一起发明机器 英格玛 破译德国密码系统的故事 关于
  • 对项目的理解

    xfeff xfeff 又有好久没有更新博客了 xff0c 虽然我一直告诫自己 xff0c 不管有多忙都要找点时间来写博客 最近主要的精力都投入到项目中 xff0c 我就说说自己的一些想法吧 1 项目的前期是最忙的 xff0c 投入最大 当
  • 对项目的理解(2)

    xfeff xfeff 项目是做不完的 xff0c 把近期的一些想法写出来 xff1a 1 项目初期做好每一个功能的方案 项目初期 xff0c 有一个辅助功能被我忽略了 xff0c 以为 很容易实现 xff0c 就没有花时间去研究 xff0
  • 人工智能的过去

    人工智能的起源 xff1a 人工智能在五六十年代时正式提出 xff0c 1950年 xff0c 一位名叫马文 明斯基 后被人称为 人工智能之父 的大四学生与他的同学邓恩 埃德蒙一起 xff0c 建造了世界上第一台神经网络计算机 这也被看做是
  • instant app入门和开发指南

    本文由 a href http renyugang io 2018 05 17 writing 玉刚说写作平台 a 提供写作赞助 xff0c 赞助金额 xff1a 300元 原作者 xff1a AndroFarmer 版权声明 xff1a
  • 解决办法:关于在powershell中进不去anaconda环境

    对于cmd可以进入anaconda xff08 base xff09 环境 xff0c 但是powershell中不可以 xff0c 我的电脑的原因是我的user用户名是中文的 xff0c 先在控制面板和注册表中将用户名改为英文 再用Adm
  • 如何将文件传到Linux服务器中

    操作步骤 xff1a xff08 1 xff09 在本机安装Xftp xff08 2 xff09 连接目标服务器 xff08 3 xff09 选中对应的文件 xff0c 直接拖拽到Linux服务器中 xff0c 等待传输完成即可 如图所示
  • Matlab下多径衰落信道的仿真

    衰落信道参数包括多径扩展和多普勒扩展 时不变的多径扩展相当于一个延时抽头滤波器 xff0c 而多普勒扩展要注意多普勒功率谱密度 xff0c 通常使用Jakes功率谱 高斯 均匀功率谱 多径衰落信道由单径信道叠加而成 xff0c 而单径信道中
  • linux安装Python3

    0 注 xff1a 进行安装时我使用的用户是超级用户root xff0c 如果你不是超级用户在有些命令的前面需要添加sudo xff0c 也可以使用su命令切换成超级用户 1 查看是否有Python3 xff08 有时候虽然有包含但还是一堆
  • chapter8——消抖技术

    目录 1 简介2 开关行为3 开关种类4 消抖5 消抖指南 1 简介 在电子设备内两个金属触点随着触点的断开闭合便产生了多个信号 xff0c 这就是抖动 消抖 是用以确保在每一次断开或闭合触点时只有一个信号起作用的硬件设备或软件 机械开关和
  • 全新的视图绑定工具 — ViewBinding 使用指南

    本文首发于微信公众号 Android开发之旅 xff0c 欢迎关注 xff0c 获取更多技术干货 Jetpack版Wan Android项目地址 xff1a Android Jetpack架构开发组件化应用实战 欢迎star Flutter
  • webstorm(2019)配置eslint规范

    在项目中我们为了代码书写更规范 xff0c 在项目中安装ESlint帮助我们检查语法 xff0c 那么下面介绍下在webstorm中如何配置ESlint规范 步骤如下 xff1a 1 快捷键 ctrl 43 alt 43 s打开设置 xff
  • 与线程同步以及线程调度相关的方法

    wait xff1a 使一个线程处于等待 xff08 阻塞 xff09 状态 xff0c 并且释放所持有的对象的锁 xff1b sleep xff1a 使一个正在运行的线程处于睡眠状态 xff0c 是一个静态方法 xff0c 调用此方法要处
  • MongoDB 的功能

    面向集合的存储 xff1a 适合存储对象及 JSON 形式的数据 动态查询 xff1a Mongo 支持丰富的查询表达式 查询指令使用 JSON 形式的标记 xff0c 可轻易查询文档中内嵌的对象及数组 完整的索引支持 xff1a 包括文档
  • Redis 有哪些特性?

    1 速度快 xff1a 使用标准 C 写 xff0c 所有数据都在内存中完成 xff0c 读写速度分别达到 10 万 20 万 2 持久化 xff1a 对数据的更新采用 Copy on write 技术 xff0c 可以异步地保存到磁盘上
  • 在树莓派4b上安装kali linux 2019.4并启用vnc服务

    安装 x11vnc 工具 root 64 kali apt install y x11vnc 设置密码 root 64 kali x11vnc storepasswd 设置服务 新建 lib systemd system x11vnc se
  • springboot整合⾕歌开源缓存框架Guava Cache使用

    Guava Cache使用 Guava Cache xff1a 歌开源缓存框架Guava Cache使用使用压测 具Jmeter5 x进行接口压力测试 xff1a 压测 具本地快速安装Jmeter5 x新增聚合报告 xff1a 线程组 gt
  • Android Studio之opencv极简环境配置(2022-1-30亲测有效)

    Android Studio之opencv环境配置 一 基础创建项目步骤二 OpenCv环境配置三 opencv体验 一 基础创建项目步骤 1 先创建一个app项目 2 选择Basic Activity 3 完成基础项目创建 4 运行一下看