# ImageUtil
[![API](https://img.shields.io/badge/API-22%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=22)
>>### 基于OpenCV的Android图像处理工具软件。本项目采用Android Studio开发安卓APP,使用C++(OpenCV)编写图片处理算法。主要处理图片的对比度,饱和度以及对图片进行一定程度的清晰度增强。
>>### 在网上找了许多关于开发Android APP时引入OpenCV库的资料,大多数都只说了导入OpenCV的SDK。这样确实可以使用OpenCV库,而且使用起来非常简单。但本项目是要使用C++(OpenCV)处理图片,然后Java调用C++(通过JNI)。下文将介绍如何搭建这样的一个开发环境。
# 开发工具
## 一、Windows 10
## 二、Android Studio 4.1.2
>>## Android Studio 4.1.2或以上版本。链接:[Android Studio](https://developer.android.google.cn/studio/)
## 三、OpenCV for Android 4.5.0
>>## OpenCV for Android 4.5.0,链接:[OpenCV](https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download)
# 开发语言
## Android -- Java
>>### Android app 使用Java语言开发。
## OpenCV -- C++
>>### OpenCV 使用C++语言开发
# 设计方案
## 一、开发模式方案对比
>>### 本项目采用“Android + OpenCV + C++” 的开发模式。传统的“Android + OpenCV”开发模式都是下载OpenCV SDK后直接导入官方已经写好的SDK模块然后调用;这样确实省时省力,而且非常好用。但是这样也存在一些不足,尤其是这种开发模式完全不符合本项目的设计需求。下面给出对比。
>>### 1. 算法不可见,不可修改
>>>>#### OpenCV SDK完全是调用Java接口,图片处理算法不可见。
>>>>#### 本项目使用Java和C++分别编写Android app程序和图片处理算法。
>>### 2. 项目体积太大
>>>>#### OpenCV SDK导入后有1.3GB,整个项目有将近2GB的体积,项目太臃肿。
>>>>#### 本项目只移植OpenCV中必要的库文件,整个项目体积减少了1GB。
>>### 3. 方案优势
>>>>#### OpenCV SDK包含非常多的图片处理接口,而且处理算法都很好。而本项目的初衷主要是学习图片处理,如果直接使用SDK,那么就无从知其原理;即使了解其原理,也没有实际经验。因此采用“Android + OpenCV + C++”这种开发模式不仅能够掌握处理图片的原理,还非常符号“理论+实践”的学习理念。
## 二、项目结构设计方案对比
>>### 本项目采用“app + module”模块化方案进行开发,传统的“app”模块开发虽然构建速度快,但是项目模块的内聚性降低,耦合性升高,不太符合“高内聚低耦合”的软件设计原则。其中module将其命名为:“opencv450”,表示使用的OpenCV的版本为4.5.0
>>### 1. app模块
>>>>#### app模块只需要完成app的UI设计和业务逻辑处理,无需处理其他事物。
>>### 2. opencv450模块
>>>>#### 在本项目中,opencv450模块主要和底层(C++)互交,然后对其进行封装并对外提供接口。而app模块只需要和该opencv450模块互交即可,无需关心底层算法。
>>### 4. 模块调用示意图
![模块调用示意图](https://github.com/AivenLi/ImageUtil/blob/main/document/image/android_module_call_prompt.png "模块调用示意图")
>>### 3. 方案优势
>>>>#### (1)将项目模块化,符合“高内聚低耦合”的软件设计原则。
>>>>#### (2)更新方便,如果以后需要对本项目做改动。例如使用更高版本的OpenCV库,只需要修改module即可;如果要修改app的UI,或者其他的东西,只需要修改app模块即可。
# 环境搭建
## 一、安装Android Studio。
>>### 可参考[安装Android Studio](https://blog.csdn.net/Y74364/article/details/96121530?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.control "安装Android Studio")
## 二、下载SDK
>>### 1. 打开Android Studio,点击左上角的“File”,再点击“Setting”。然后依次展开“Appearance & Behavior”、“System setting”,即可看到“Android SDK”。点击该选项,根据需要下载对应的SDK。一般来说现在开发安卓APP都是5.1以上,所以建议把5.1以上的SDK都安装了。步骤如下图所示:
![SDK安装](https://www.slwolf.com/img/sdk_1.png "SDK安装步骤")
![SDK安装](https://www.slwolf.com/img/sdk_2.png "SDK安装步骤")
>>### 2. 等待下载安装之后先不要重启软件,先把NDK安装了再重启Android Studio。
## 三、下载NDK和CMake
>>### 1. 步骤和安装SDK一样,在安装SDK的界面点击“SDK Tools”。在下面的列表中可看到“NDK”、“CMake”等选项。勾选并下载即可。如下图所示:
![NDK安装](https://www.slwolf.com/img/ndk_1.png "NDK安装步骤")
>>### 2. 下载完成之后Android Studio会自动安装,安装完成重启Android Studio即可。
>>### 3. 如果首次打开Android Studio,找不到上图中得选项,可先新建一个项目然后再进行上述操作。
# 构建项目
## 一、 项目结构
![项目结构](https://www.slwolf.com/img/project_struct.png "项目结构")
## 二、新建项目
>>### 1. File --> New --> New project
>>### 2.选择“Empty Activity”就可以了,不要选择“Native C++”。
## 三、新建模块
>>### 1. File --> New --> New module
>>### 2. 选择“Android Library”
## 三、移植OpenCV
>>### 1. 在模块的src/main/目录下新建“cpp”和“jniLibs”文件夹(名字可以自取)。如下图所示:
![模块目录结构](https://www.slwolf.com/img/android_opencv_module.png "模块目录结构")
>>### 2. 找到之前下载好的OpenCV目录(OpenCV-android-sdk),进入/sdk/native/jni,把该目录下的“include”文件夹复制到模块的/src/main/jniLibs中。如下图所示:
![复制include](https://www.slwolf.com/img/android_opencv_module_include.png "复制include")
>>### 3. 进入OpenCV目录:sdk/native/staticlibs,复制所有的文件到模块的jniLibs中。这里可以根据需要复制,如果不使用模拟器可以不用复制“x86和x86_64”,本项目没有配置模拟器的环境。
![复制库文件](https://www.slwolf.com/img/android_opencv_module_libs.png "复制库文件")
>>### 4. 进入OpenCV目录:/sdk/native/3rdparty/libs,该目录下的文件夹和staticlibs中的一样,将各个文件夹下的文件(都是“*.a”的文件)复制到模块中jniLibs中对应的文件夹里面即可。其实有一些库文件本项目用不到,但是为了后期更新方便,所以才复制所有的库文件。
>>### 5. 新建cpp和CMakeLists.txt文件,在模块的cpp目录下新建“native-lib.cpp”和“CMakeLists.txt”文件,其中cpp文件名可以任取。如下图:
![创建cpp文件](https://www.slwolf.com/img/android_opencv_module_cpp_make.png "创建cpp文件")
>>### 6. 配置C++的编译脚本:CMakeLists.txt,打开该文件,加入以下代码:
---
cmake_minimum_required(VERSION 3.10.2)
project("opencv450")
set(libs ${CMAKE_SOURCE_DIR}/..)
include_directories(${libs}/cpp/include)
add_library(libcpufeatures STATIC IMPORTED)
set_target_properties(libcpufeatures PROPERTIES
IMPORTED_LOCATION "${libs}/jniLibs/${ANDROID_ABI}/libcpufeatures.a")
add_library(ittnotify STATIC IMPORTED)
set_target_properties(ittnotify PROPERTIES
INTERFACE_LINK_LIBRARIES "dl"
)
set_target_properties(ittnotify PROPERTIES
IMPORTED_LOCATION "${libs}/jniLibs/${ANDROID_ABI}/libittnotify.a")
add_library(tegra_hal STATIC IMPORTED)
set_target_properties(tegra_hal PROPERTIES
IMPORTED_LOCATION "${libs}/jniLibs/${ANDROID_ABI}/libtegra_hal.a")
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于OpenCV+JAVA+C++的Android图像处理工具软件+源码+开发文档说明+实用教程,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于OpenCV+JAVA+C++的Android图像处理工具软件+源码+开发文档说明+实用教程,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 基于OpenCV的Android图像处理工具软件。本项目采用Android Studio开发安卓APP,使用C++(OpenCV)编写图片处理算法。主要处理图片的对比度,饱和度以及对图片进行一定程度的清晰度增强。 在网上找了许多关于开发Android APP时引入OpenCV库的资料,大多数都只说了导入OpenCV的SDK。这样确实可以使用OpenCV库,而且使用起来非常简单。但本项目是要使用C++(OpenCV)处理图片,然后Java调用C++(通过JNI).......
资源推荐
资源详情
资源评论
收起资源包目录
基于OpenCV+JAVA+C++的Android图像处理工具软件+源码+开发文档说明+实用教程(毕业设计&课程设计&项目开发) (572个子文件)
liblibprotobuf.a 67.05MB
liblibprotobuf.a 44.59MB
libIlmImf.a 38.05MB
libIlmImf.a 29.08MB
libopencv_gapi.a 17.21MB
libopencv_gapi.a 11.91MB
libopencv_dnn.a 11.44MB
libopencv_dnn.a 9.59MB
liblibwebp.a 6.11MB
libopencv_core.a 5.69MB
libopencv_core.a 5.65MB
libopencv_imgproc.a 5.57MB
libopencv_imgproc.a 5.14MB
libopencv_calib3d.a 4.62MB
libtbb.a 4.43MB
libopencv_calib3d.a 4.11MB
libtbb.a 3.21MB
liblibwebp.a 2.96MB
liblibtiff.a 2.94MB
liblibjpeg-turbo.a 2.82MB
liblibopenjp2.a 2.39MB
liblibjpeg-turbo.a 2.03MB
liblibtiff.a 1.93MB
liblibpng.a 1.78MB
libopencv_features2d.a 1.56MB
libopencv_ml.a 1.51MB
libopencv_stitching.a 1.5MB
libopencv_ml.a 1.5MB
liblibopenjp2.a 1.49MB
libopencv_features2d.a 1.39MB
libopencv_stitching.a 1.3MB
libopencv_photo.a 1.29MB
libopencv_imgcodecs.a 1.25MB
libopencv_imgcodecs.a 1.16MB
libopencv_flann.a 1.16MB
libopencv_photo.a 1.15MB
libopencv_flann.a 1.09MB
liblibpng.a 1.09MB
libopencv_objdetect.a 899KB
libopencv_videoio.a 894KB
libtegra_hal.a 891KB
libtegra_hal.a 876KB
libopencv_videoio.a 829KB
libade.a 814KB
libopencv_objdetect.a 731KB
libopencv_video.a 611KB
libopencv_video.a 579KB
libade.a 511KB
libittnotify.a 148KB
libittnotify.a 123KB
libopencv_highgui.a 95KB
libopencv_highgui.a 94KB
libcpufeatures.a 36KB
libcpufeatures.a 28KB
libquirc.a 25KB
libquirc.a 20KB
gradlew.bat 2KB
ienhance.cpp 12KB
基于Android图片处理.docx 209KB
typora-setup-x64.exe 57.28MB
.gitignore 1KB
.gitignore 47B
.gitignore 6B
.gitignore 6B
.gitignore 6B
build.gradle 3KB
build.gradle 2KB
build.gradle 1KB
build.gradle 671B
settings.gradle 191B
gradlew 5KB
core_c.h 126KB
msa_macros.h 81KB
types_c.h 70KB
kmeans_index.h 66KB
imgproc_c.h 50KB
dist.h 40KB
cvdef.h 34KB
constants_c.h 30KB
cv_cpu_helper.h 27KB
hierarchical_clustering_index.h 26KB
autotuned_index.h 21KB
kdtree_single_index.h 20KB
kdtree_index.h 20KB
lsh_table.h 18KB
types_c.h 18KB
lsh_index.h 15KB
result_set.h 15KB
index_testing.h 11KB
highgui_c.h 10KB
any.h 8KB
cv_cpu_dispatch.h 8KB
hdf5.h 7KB
allocator.h 6KB
composite_index.h 6KB
all_indices.h 6KB
nn_index.h 6KB
saving.h 6KB
simplex_downhill.h 6KB
videoio_c.h 6KB
共 572 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
梦回阑珊
- 粉丝: 2553
- 资源: 657
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功