学习笔记—Android studio导入OpenCV配置使用

这篇具有很好参考价值的文章主要介绍了学习笔记—Android studio导入OpenCV配置使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android导入OpenCV配置使用

1.下载OpenCV-android-sdk

官网下载sdk,打开opencv官网,点击Android,完成后解压
https://opencv.org/
学习笔记—Android studio导入OpenCV配置使用
解压后,文件夹下有这些文件

  • samples Android代码工程
  • sdk 包含opencv的Java的接口和JNI接口等
    学习笔记—Android studio导入OpenCV配置使用

2.新建工程

打开Android studio,选择模板,这时选择最后一项Native C++,然后进入配置界面。
学习笔记—Android studio导入OpenCV配置使用

  • 这里注意你下载的Android-sdk版本来选择API

学习笔记—Android studio导入OpenCV配置使用

  • 选择C++14,finish

学习笔记—Android studio导入OpenCV配置使用

3.环境配置

  1. 将OpenCV库作为Module导入。具体步骤为:File->New->Import Module,然后将OpenCV-android-sdk\sdk目录导入,最好顺便将模块名改成opencv+版本号。如下图,然后Next->Finish。
    学习笔记—Android studio导入OpenCV配置使用学习笔记—Android studio导入OpenCV配置使用
  2. 修改OpenCV下的gradle文件, apply plugin: 'com.android.library,并将API改为与app一致
    学习笔记—Android studio导入OpenCV配置使用
  3. 添加依赖,菜单栏选择File->Project Structure,在Dependencies选项中选择app,点击+,选择Module dependency,如下图:
    学习笔记—Android studio导入OpenCV配置使用
    勾选OpenCV,点击OK,等待同步
    学习笔记—Android studio导入OpenCV配置使用
  4. 新建jinLibs文件夹, 右键main,选择New-Folder-JNI Folder,如下图,并改名为jniLibs
    学习笔记—Android studio导入OpenCV配置使用学习笔记—Android studio导入OpenCV配置使用
  • 打开解压缩后的opencv-android-sdk文件,将sdk\native\jni\include文件夹下的opencv2文件夹复制到cpp下将sdk\native\libs下的文件夹复制到jniLibs下,如下图
    学习笔记—Android studio导入OpenCV配置使用
    学习笔记—Android studio导入OpenCV配置使用
    学习笔记—Android studio导入OpenCV配置使用
  1. 配置参数,打开app的gradle,添加sourceSets
sourceSets {
        main{
            jni.srcDirs = ['src/main/jniLibs']
        }
    }

在externalNativeBuild下添加以下代码

externalNativeBuild {
            cmake {
                cppFlags '-std=c++14 -frtti -fexceptions'
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                arguments '-DANDROID_STL=c++_shared'
            }
        }

这时环境就算配置好了,接下来用一个简单的灰度化来验证一下

灰度化

java代码
package com.example.myandroidopencv;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.myandroidopencv.databinding.ActivityMainBinding;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import java.io.File;
import java.io.FileNotFoundException;

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

    // Used to load the 'myandroidopencv' library on application startup.
    static {
        System.loadLibrary("myandroidopencv");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

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

        btn_load.setOnClickListener(this);
        btn_gray.setOnClickListener(this);

    }

    /**
     * A native method that is implemented by the 'myandroidopencv' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_load:
                loadImg();
                break;
            case R.id.btn_gray:
                doChgGray();
                break;
        }
    }
    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;
            }
        }
    };
}
页面布局代码
<?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_height="300dp"/>


    <LinearLayout
        android:paddingTop="250dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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>

学习笔记—Android studio导入OpenCV配置使用
学习笔记—Android studio导入OpenCV配置使用文章来源地址https://www.toymoban.com/news/detail-469032.html

到了这里,关于学习笔记—Android studio导入OpenCV配置使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android Studio Electric Eel 2022.1.1 Patch 2 导入opencv 4.5,并实现图片灰度变换和图片叠加

    Android Studio Electric Eel 2022.1.1 Patch 2 https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download with API23: 导入opencv sdk: File-New-Import Module 添加工程依赖:File-Project Structure, sdk为opencv sdk. plugins { id ‘com.android.application’ version ‘7.4.2’ apply false id ‘com.android.library’

    2024年02月05日
    浏览(48)
  • Android系统源码如何导入android studio中使用以及导入过程中遇到的问题

    一、在源码根目录中编译出android.ipr和android.iml android.ipr:整个系统源码的工程项目,android studio上直接打开即可查看源码 android.iml:工程中的具体配置信息 二、安装android studio,打开工程项目android.ipr 三、配置sdk 废话不多说,直接开始 进入源码根目录 之后选择要编译的项目

    2024年02月12日
    浏览(29)
  • 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 )下载适用于And

    2024年02月03日
    浏览(33)
  • Android studio配置OpenCV的JNI接口,实现C++代码编程

    目录 一、下载OpenCV-android-sdk 二、新建项目 三、导入OpenCV包  四、配置OpenCV的JNI接口,拷贝OpenCV所需的头文件和库文件 五、修改Cmake文件  六、配置app的build.gradle文件  七、测试 OpenCV官网地址:https://opencv.org/  点击Library--Releases,下载Android版本,解压得到 OpenCV-android-sdk文件

    2024年02月10日
    浏览(33)
  • 【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

    最近一个项目要编译深度学习的库,需要用到 opencv 和 JNI,本文档用于记录环境配置中遇到的常见错误以及解决方案 解决办法: 删除文件 .idea/gradle.xml 和 .idea/workspace.xml , 重新编译; 解决办法:Invalid Gradle JDK configuration found 原因是NDK版本过高,跟当前的AndroidStudio版本不匹配

    2024年02月11日
    浏览(28)
  • 【图文详解】Android Studio(新版本) 配置OpenCV库,解决出现的各种问题

    写这篇文章的目的就是记录自己在配置OpenCV库时遇到的问题。在网上查找相关资料时,发现很多Android Studio都是老版本,并且出现的问题都不能被解决。自己在配置过程中出现的问题都进行记录下来并一一解决。 点击 New Project 选择界面 配置相关参数 创建成功 确保创建成功(

    2024年02月03日
    浏览(33)
  • Android Studio开发之路(七)CameraX&&Opencv的使用

    工作目标:做一个显示单通道图像的相机,实现预览和拍照。 原本是调用opencv-android里边的JavaCamera2View来实现,这个用起来比较方便,它提供了集成好的相机预览界面,并且提供了帧处理函数。但是问题是用opencv相机获取到的帧图片分辨率不高,达不到目标效果。 而CameraX作

    2024年01月21日
    浏览(32)
  • 《Android 移动应用基础教程(Android Studio)(第2版)》【学习笔记】【2023春】【附源码】

    《Android 移动应用基础教程(Android Studio)(第2版)》黑马程序员 源代码 Android——六大基本布局总结/CSDN@小马 同学 【Android】线性布局(LinearLayout)最全解析/CSDN@Teacher.Hu 一个不错的计算器界面👇 Android Studio App LinearLayout多层布局嵌套/CSDN@pythontojava 一个简单的布局👇 Andro

    2024年02月01日
    浏览(27)
  • 使用Android Studio配置已有工程

    Download Android Studio App Tools - Android Developers Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today. https://developer.android.google.cn/studio/ 安装完成,其他配置详见: Android Studio安装和使用教程(全文图解)_android studio安装教程_朝歌

    2024年02月16日
    浏览(29)
  • [Android Studio] 导入安卓Android项目教程

    A项目指:要导入的项目;B项目指自己电脑上可以运行的项目 根据步骤一步一步来,别急。 将要导入的项目(简称为A)根目录下的这些文件删掉:.gradle、.idea 、.iml后缀的文件、 local.properties 进入app文件夹,将这些文件删掉:build、.iml后缀的文件 打开一个你在自己电脑上可

    2024年02月04日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包