iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >基于Android studio3.6的java api方式调用opencv
  • 348
分享到

基于Android studio3.6的java api方式调用opencv

AndroidStudiostudioJAVAopencvapiAndroid 2022-06-06 13:06:50 348人浏览 泡泡鱼
摘要

基本环境: Android studio3.6 NDK:r15c(尽量使用该版本) OpenCV3.4.1 android sdk   操作: (1)新建工程,选择Empty

基本环境:

Android studio3.6

NDK:r15c(尽量使用该版本)

OpenCV3.4.1 android sdk

 

操作:

(1)新建工程,选择Empty Activity,工程名为op

(2)File->New->Import Module,然后选择自己的java-opencv的相对应路径,比如,D:\Android\OpenCV-android-sdk\sdk\java

(3)修改openCVlibrary341下面的build.gradle中的,compileSdkVersion,buildToolsVersion,minSdkVersion,targetSdkVersion,使得和自己的工程下面的app/build.gradle的版本一致。

(4)修改openCVlibrary341下面的src/main中的AndroidManifest.xml中的minSdkVersion,targetSdkVersion,使得和自己的工程下面的app/build.gradle的版本一致。

(5)app/src/main/res/drawable下面增加一张图片

(6)app/src/main/res/layout中修改布局文件activity_main.xml


    

(7)修改app/src/main/java/com.example.op下面的MainActivity

package com.example.op;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends AppCompatActivity {
    Button btnProcess;
    Bitmap srcBitmap;
    Bitmap grayBitmap;
    ImageView img;
    private static boolean flag = true;
    private static boolean isFirst = true;
    private static final String TAG = "MainActivity";
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            // TODO Auto-generated method stub
            switch (status){
                case BaseLoaderCallback.SUCCESS:
                    Log.i(TAG, "baseloader success");
                    break;
                default:
                    super.onManagerConnected(status);
                    Log.i(TAG, String.valueOf(status));
                    break;
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnProcess = (Button)findViewById(R.id.btn_gray_process);
        img = (ImageView)findViewById(R.id.img);
        Log.i(TAG, "initUI sucess...");
        btnProcess.setOnClickListener(new ProcessClickListener());
    }
    public void procSrc2Gray(){
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dilireba);
        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat
        Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
        Log.i(TAG, "procSrc2Gray sucess...");
    }
    private class ProcessClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(isFirst)
            {
                procSrc2Gray();
                isFirst = false;
            }
            if(flag){
                img.setImageBitmap(grayBitmap);
                btnProcess.setText("gray image");
                flag = false;
            }
            else{
                img.setImageBitmap(srcBitmap);
                btnProcess.setText("rgb image");
                flag = true;
            }
        }
    }
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        //load OpenCV engine and init OpenCV library
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getApplicationContext(), mLoaderCallback);
        Log.i(TAG, "onResume sucess load OpenCV...");
    }
}

(8)app/build.gradledependencies中增加,

implementation project(path: ':openCVLibrary341')

(9)环境变量,path中增加adb所在路径,C:\Users\xxx\AppData\Local\Android\Sdk\platfORM-tools

(10)命令行进入apk所在的路径D:\Android\OpenCV-android-sdk\apk,执行,

adb install OpenCV_3.4.1_Manager_3.41_x86.apk

在模拟器中安装opencv-manager,然后重启模拟器

工程目录结构:

运行:

 

The Code:

https://download.csdn.net/download/qq_14845119/12272674

 

 

 


作者:watersink


--结束END--

本文标题: 基于Android studio3.6的java api方式调用opencv

本文链接: https://www.lsjlt.com/news/29272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Scala和Java方法的相互调用
    目录在Java中调用Scala的方法呢?1.首先是静态方法2. JAVA中调用Scala的方法3.Scala中的非静态方法4.Java中的调用scala中调用java方法报错在Sca...
    99+
    2024-04-02
  • java分布式基于RestTemplate的使用方法
    目录1.前言2.RestTemplate get请求及传参2.1正常get请求不带参2.2 get请求带参使用2.3 编写在线目录扫描脚本3.RestTemplate post请求3...
    99+
    2024-04-02
  • 基于聚合数据的短信API接口(54)调用示例-Java版
    前期准备 根据运营商的要求,目前此接口只对实名认证的企业用户开放使用,所以在使用之前请确保您是实名认证的企业用户 申请接口,你可以在个人中心 ➡️ 数据中心 ➡️ 我的API 模块看到此接口的调用凭证请求key 购买数据的请求次...
    99+
    2024-04-02
  • 用于解析MapInfo TAB格式的Java API
    有几个Java API可以用于解析MapInfo TAB格式的文件。以下是其中一些常用的API:1. JMapInfo API:这是...
    99+
    2023-09-27
    Java
  • Android 基于Bitmap的四种图片压缩方式
    目录知识点介绍 正文 1、质量压缩 2、采样率压缩 3、缩放法压缩 4、RGB_565 通过改变图片格式来实现压缩 总结 知识点介绍 Android 中图片主要以 Bitmap 的...
    99+
    2024-04-02
  • Java基于注解的Excel导出方式
    目录Java注解的Excel导出java简单的导出excel总结Java注解的Excel导出 依赖:  <dependency>             <grou...
    99+
    2023-01-09
    Java注解 Java的Excel导出 Java Excel导出
  • Python调用API接口的几种方式
    Python调用API接口的几种方式主要有以下几种:1. 使用标准库:Python标准库中的urllib和urllib2模块可以用来...
    99+
    2023-09-02
    Python
  • SpringBoot-RestTemplate实现调用第三方API的方式
    RestTemplate简介Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http...
    99+
    2022-12-08
    SpringBoot RestTemplate调用第三方API SpringBoot RestTemplate
  • 基于JVM-jinfo的使用方式
    目录jinfo是什么,可以干什么?JVM Troubleshooting命令-jinfo概述命令格式功能选项jinfo是什么,可以干什么? jinfo全称Configuration ...
    99+
    2024-04-02
  • 如何在Java API中实现基于Spring的响应式编程?
    响应式编程是一种以数据流和变化传播为基础的编程模型,它通过异步编程来提高应用程序的响应能力和并发性。Spring框架从4.0版本开始引入了对响应式编程的支持,使得基于Spring的应用程序可以更好地应对高并发和高吞吐的场景。本文将介绍如何在...
    99+
    2023-09-21
    api spring 响应
  • java关于调用方法的汇总
    以下我们根据JAVA的调用方法做了整理和总结,以及相关的调用代码也做测试,以下来学习下。java方法主要分为三种:一种是静态方法这种方法的话用static修饰,这个方法不需要与某个特定对象进行绑定;第二种就是常见的没有用static修饰的方...
    99+
    2023-05-30
    java 调用方法 ava
  • 关于.NET6 Minimal API的使用方式详解
    目录前言使用方式几行代码构建Web程序更改监听地址日志操作基础环境配置主机相关设置默认容器替换中间件相关请求处理路由约束模型绑定绑定示例自定义绑定总结前言 随着.Net6的发布,微软...
    99+
    2024-04-02
  • 基于FeignClient调用超时的处理方案
    FeignClient调用超时 出现问题的前提 SpringCloud间FeignClient调用出现ReadTimeOut的情况 FeignClient服务间调用的默认超时时间为2...
    99+
    2024-04-02
  • 基于node.js的聚合数据的短信API接口调用示例
    前期准备 根据运营商的要求,目前此接口只对实名认证的企业用户开放使用,所以在使用之前请确保您是实名认证的企业用户 申请接口,你可以在个人中心 ➡️ 数据中心 ➡️ 我的API 模块看到此接口的调用凭证请求key 接口申请开通入口...
    99+
    2024-04-02
  • 基于java文件上传-原始的Servlet方式
    前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的。刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,...
    99+
    2023-05-31
    java 文件上传 servlet
  • JavaScript中关于数组的调用方式
    目录JavaScript数组的调用伪数组JS调用数组方法总结JavaScript数组的调用 1.数组的调用 描述:数组的调用实际上是指数组元素的调用。数组元素通过【数组名+下标】的方...
    99+
    2023-02-10
    JavaScript数组 数组的调用 JS数组调用
  • 基于聚合数据的身份证实名认证API接口调用示例-Java版
    一、申请接口 通过https://www.juhe.cn/docs/api/id/103自助申请开通接口,获取API请求KEY 二、请求参数 名称 是否必填 说明 idcard 是 身份证号码 realname 是 姓名 ...
    99+
    2024-04-02
  • 基于聚合数据的短信API接口调用示例-Python版
    一、申请接口 通过https://www.juhe.cn/docs/api/id/54自助申请开通短信API,获得接口请求Key。(目前接口暂只支持企业类用户使用) 申请后,在个人中心提交短信模板,聚合官方已经提供了多个常用模板,可以快捷申...
    99+
    2024-04-02
  • golang基于errgroup实现并发调用的方法
    目录串行调用基于sync.WaitGroup实现简单的并发调用基于errgroup.Group实现并发调用总结串行调用 在用go编写web/rpc服务器的时候,经常会出现需要对下游多...
    99+
    2024-04-02
  • SpringCloud基于Feign的可编程式接口调用实现
    目录前言一、基本使用1.引依赖2.加注解3.声明接口4.调用二、进阶1.日志配置2.性能优化前言 Feign 可以替代 RestTemplate 完成可编程式接口调用,并且内部集成 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作