【Android+OpenCV】Android Studio的安装全过程+在Android Studio中配置OpenCV

【Android+OpenCV】Android Studio的安装全过程+在Android Studio中配置OpenCV,第1张

概述版本:Android3.5.2SDK28.0.2opencv3.4.10ndkr16b1、安装AndroidStudio以及OpenCV1.1下载安装包:(1)去AndroidStudio中文社区下载android-studio-ide-191.5977832-windows.exe(2)去OpenCV官网,下载OpenCV-3.4.10-android-sdk(3)去NDK官网下载android-ndk
版本:AndroID 3.5.2SDK     28.0.2opencv  3.4.10ndk     r16b
1、安装AndroID Studio 以及 OpenCV1.1 下载安装包:

(1)去Android Studio中文社区下载androID-studio-IDe-191.5977832-windows.exe

(2)去OpenCV官网,下载OpenCV-3.4.10-androID-sdk

(3)去NDK官网下载 androID-ndk-r16b-windows-x86_64

1.2 安装AndroID Studio

双击androID-studio-IDe-191.5977832-windows.exe开始安装,过程如下:
把两个都勾上,下一步:


改成自己的文件夹,注意路径中务必不能有空格:

直接下一步:

继续下一步:


点击finish,同时开启AS:


启动界面如下:


d出如下报错框,正常,点击Cancel取消该框:


选Custom:


勾上,更改SDK位置,点next:


点finish:


出现如下界面,点击Configure按钮:


选择SDK Manager:


我的电脑内存8G,所选的默认虚拟机内存大小2G:


点击finish:


下载好了之后,点finish:

1.3 第一次新建工程项目

在下面这个界面里,点击第一项 Start a new AndroID Studio project


滑到最后,选择原生C++模板:

改名后,选择java模板,next:


修改为C++14,finish:


这里,正在下载gradle,如果网不好,可以叉掉整个界面,等会用离线方式下载gradle。

在gradle官网下载gradle-5.4.1-all.zip


下载好后,把压缩包文件gradle-5.4.1-all.zip拷贝到文件夹,删除文件夹中原来的两个半成品文件,最后如图所示:

打开AS:
将左侧AndroID模式切换成Project模式,点击右侧小象按钮,开始解压…

此时可以做其他工作:
file—>Settings—>Appearance & Behavior—>System Settings—>取消勾选Reopen last project on startup(省的每次都打开最近项目,勾掉后,每次打开启动页面,进入选择页面而非项目页面)

做好了其他工作回来发现报错了:ERROR: Failed to install the following AndroID SDK packages as some licences have not been accepted.

解决办法:进入SDK的目录,在目录的地址栏D:\AndroID2\SDK\tools\bin输入cmd,回车打开命令行终端,这里面有个windows批处理文件sdkmanager.bat。运行下面的命令,然后就有一大堆的 license 等着你输入yes,统计了一下,总共要输入8个y:

sdkmanager --licenses

关闭命令行终端窗口,重新点击AS中的右上角小象图标。开始重新解压缩,解压缩完毕后是下面这样:

继续报错:ERROR: CMake ‘3.10.2’ was not found in PATH or by cmake.dir property.

报错原因是没有安装cmake工具,在如下位置安装即可:(file—>Settings)


等着下载结束,安装完成后,点finish。此时重新点小象按钮重新解压,还是会出错。关掉整个AS,重新打开项目,点击小象按钮,一切正常:

1.4 修改项目的NDK版本

官方给的版本过高r20,需要调整为r16

file—>Project Structure—>SDK Location—> 选择本地的NDK,然后点击Apply和OK。又开始一轮编译,等完成。

2、使用OpenCV在安卓端处理图片

参考牛人链接:OpenCV On Android最佳环境配置指南(Android Studio篇)

2.1 CMake文件
cmake_minimum_required(VERSION 3.4.1)# ##################### OpenCV 环境 #############################设置OpenCV-androID-sdk路径set( OpenCV_DIR D:/AndroIDData/opencv-3.4.10-androID-sdk/OpenCV-androID-sdk/sdk/native/jni )find_package(OpenCV required )if(OpenCV_FOUND)    include_directorIEs(${OpenCV_INCLUDE_Dirs})    message(STATUS "OpenCV library status:")    message(STATUS "    version: ${OpenCV_VERSION}")    message(STATUS "    librarIEs: ${OpenCV_liBS}")    message(STATUS "    include path: ${OpenCV_INCLUDE_Dirs}")else(OpenCV_FOUND)    message(FATAL_ERROR "OpenCV library not found")endif(OpenCV_FOUND)# ###################### 项目原生模块 ###########################add_library( native-lib        SHARED        native-lib.cpp)target_link_librarIEs( native-lib        ${OpenCV_liBS}        log        jnigraphics)

路径的修改参考的是本地OpenCV包中的以下位置:

2.2 activity_main.xml
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent">    <ImageVIEw        androID:ID="@+ID/imageVIEw"        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent" />    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_alignParentBottom="true"        androID:orIEntation="horizontal">        <button            androID:ID="@+ID/show"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:layout_weight="1"            androID:text="show" />        <button            androID:ID="@+ID/process"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:layout_weight="1"            androID:text="process" />    </linearLayout></relativeLayout>
2.3 MainActivity.java
package com.example.opencvdemo;import androIDx.appcompat.app.AppCompatActivity;import androID.graphics.Bitmap;import androID.graphics.BitmapFactory;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.ImageVIEw;import androID.Widget.TextVIEw;public class MainActivity extends AppCompatActivity implements VIEw.OnClickListener {    private ImageVIEw imageVIEw;    static {//加载so库        System.loadlibrary("native-lib");    }    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        imageVIEw = findVIEwByID(R.ID.imageVIEw);        findVIEwByID(R.ID.show).setonClickListener(this);        findVIEwByID(R.ID.process).setonClickListener(this);    }    @OverrIDe    public voID onClick(VIEw v) {        if (v.getID() == R.ID.show) {            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cat);            imageVIEw.setimageBitmap(bitmap);        } else {            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cat);            getEdge(bitmap);            imageVIEw.setimageBitmap(bitmap);        }    }    //获得Canny边缘    native voID getEdge(Object bitmap);}

这几个文件的修改顺序如下,其中,JAVA中,cat是张图片。

2.4 原生层 *** 作

应用层写好了,现在开始原生层 *** 作:

2.4.1 生成头文件

打开AndroID Studio下方Terminal栏,输入cd app\src\main\java(所有应用都一样,进入java文件夹即可),回车。然后输入javah -enCoding UTF-8 包名.类名,这里输入的是

javah -enCoding UTF-8 com.example.opencv.MainActivity

回车后,将在app\src\main\java目录下生成一个头文件,如下图所示,之后将该头文件移动到app\src\main\cpp目录下。

2.4.2 native-lib.cpp

修改native-lib.cpp内容,最终结果如下面代码所示:

#include "com_example_opencvdemo_MainActivity.h"#include <androID/bitmap.h>#include <opencv2/opencv.hpp>using namespace cv;extern "C" JNIEXPORT voIDJNICALL Java_com_demo_opencv_NativeActivity_getEdge        (jnienv *env, jobject obj, jobject bitmap) {    AndroIDBitmAPInfo info;    voID *pixels;    CV_Assert(AndroIDBitmap_getInfo(env, bitmap, &info) >= 0);    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);    if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) {        Mat temp(info.height, info.wIDth, CV_8UC4, pixels);        Mat gray;        cvtcolor(temp, gray, color_RGBA2GRAY);        Canny(gray, gray, 45, 75);        cvtcolor(gray, temp, color_GRAY2RGBA);    } else {        Mat temp(info.height, info.wIDth, CV_8UC2, pixels);        Mat gray;        cvtcolor(temp, gray, color_RGB2GRAY);        Canny(gray, gray, 45, 75);        cvtcolor(gray, temp, color_GRAY2RGB);    }    AndroIDBitmap_unlockPixels(env, bitmap);}
2.4.3 build.gradle

修改app下的build.gradle,部分内容需要修改成:

...        externalNativeBuild {            cmake {                cppFlags "-std=c++14 -frtti -fexceptions"                arguments "-DANDROID_STL=gnustl_shared"            }        }...

完整build.gradle如下:

apply plugin: 'com.androID.application'androID {    compileSdkVersion 29    buildToolsversion "29.0.3"    defaultConfig {        applicationID "com.example.opencvdemo"        minSdkVersion 15        targetSdkVersion 29        versionCode 1        versionname "1.0"        testInstrumentationRunner "androIDx.test.runner.AndroIDJUnitRunner"        externalNativeBuild {            cmake {                cppFlags "-std=c++14 -frtti -fexceptions"                arguments "-DANDROID_STL=gnustl_shared"            }        }    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID-optimize.txt'), 'proguard-rules.pro'        }    }    externalNativeBuild {        cmake {            path "src/main/cpp/CMakeLists.txt"            version "3.10.2"        }    }}dependencIEs {    implementation filetree(dir: 'libs', include: ['*.jar'])    implementation 'androIDx.appcompat:appcompat:1.0.2'    implementation 'androIDx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androIDTestImplementation 'androIDx.test.ext:junit:1.1.0'    androIDTestImplementation 'androIDx.test.espresso:espresso-core:3.1.1'}

点击右上角sync Now,重新编译一下。

2.4.4 CMakeLists.txt(这里仅做展示,不要实践这个步骤)

编译完成后,为了增加兼容性,在已有的CMakeLists.txt文件中,添加如下语句,增加兼容性:

set(CMAKE_SHARED_linkER_FLAGS "${CMAKE_SHARED_linkER_FLAGS} -wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a") #增加兼容性

添加完后的完整CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.4.1)# ##################### OpenCV 环境 #############################设置OpenCV-androID-sdk路径set( OpenCV_DIR D:/AndroIDData/opencv-3.4.10-androID-sdk/OpenCV-androID-sdk/sdk/native/jni )find_package(OpenCV required )if(OpenCV_FOUND)    include_directorIEs(${OpenCV_INCLUDE_Dirs})    message(STATUS "OpenCV library status:")    message(STATUS "    version: ${OpenCV_VERSION}")    message(STATUS "    librarIEs: ${OpenCV_liBS}")    message(STATUS "    include path: ${OpenCV_INCLUDE_Dirs}")else(OpenCV_FOUND)    message(FATAL_ERROR "OpenCV library not found")endif(OpenCV_FOUND)set(CMAKE_SHARED_linkER_FLAGS "${CMAKE_SHARED_linkER_FLAGS} -wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a") #增加兼容性# ###################### 项目原生模块 ###########################add_library( native-lib        SHARED        native-lib.cpp)target_link_librarIEs( native-lib        ${OpenCV_liBS}        log        jnigraphics)

有的时候,做的多了未必是好事,比如这里就是,加上这句看似能增加兼容性的代码,反而各种报错,我现在能力不足以解决这个问题,先放在这,后面在解决。

2.4.5 安装更多组件

Tools—>SDK Manager—>Appearance & Behavior–>System Settings—>AndroID SDK—>SDK Tools—>在右下角勾上Show Package Details—>选中:

AndroID SDK 28.0.2NDK(SIDe By SIDe)16.1.4479499CMake3.6.4111459

点击Apply,安装完成:

3 结果展示

运行程序,安装在真机上:点击show,出现喵喵小可爱!


点击处理按钮,出现喵喵小可爱的轮廓:


至此,完成在AndroID Studio中配置OpenCV的整个过程,置于后续的使用和美化,需要进一步的学习。


十分有用的b站教程:
第一集
第二集

其余参考文件(都没能帮上啥忙):
android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
opencv在android平台下的开发【1】-android studio集成opencv-sdk
Android 接入 OpenCV库的三种方式

总结

以上是内存溢出为你收集整理的【Android+OpenCV】Android Studio的安装全过程+在Android Studio中配置OpenCV全部内容,希望文章能够帮你解决【Android+OpenCV】Android Studio的安装全过程+在Android Studio中配置OpenCV所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存