OpenCV 4.6 Android SDK 目录详解

2023-07-14 10:59:32 浏览数 (2)

1. 介绍

主要介绍通过https://github.com/opencv/opencv/releases 下载的 SDK的目录结构。

基于当前最新opencv-4.6.0-android-sdk 版进行的介绍。

2. SDK

主要介绍大功能和目录,一些Android Studio或者配置文件就不进行介绍了。

当我们解押SDK压缩包后,通常会见到两个目录:

  • samples :官方实例,各种功能模块的Demo,让我们可以了解相关API和功能的实现。
  • sdk:openCV 核心SDK,我们主要通过该SDK来使用OpenCV 提供的功能。

2.1 samples 目录

OpenCV 提供的官方实例,每个独立的module模块代表了openCV的一种使用场景。我们可以通过导入到Android Studio中进行编译成App了解具体的功能作用。

  • 15-puzzle:15个拼图实例,展示了如何通过OpenCV来实现一个简单的游戏。主要就是Imgproc绘制线条,文字以及响应触摸。
  • camera-calibration:摄像机校准实例,通过calibrate(校准),设置calibration(标定),undistortion(不失真),comparison(比较)类型,实现摄像头的校准。
  • color-blob-detection:斑点检测实例(色斑识别),介绍了选择一个色块后(触摸)然后openCV就会查找图片中对应颜色的轮廓,并用红色的细线进行框出。
  • face-detection:人脸识别实例,识别摄像头中的人脸,并用矩形框标注。(精度并不是很好)
  • image-manipulations:图像操作实例,例如:hist,canny,sobel,transform,resize,rectangle,canvertScaleAbs,cvtColor等api的使用。(上面api都是通过Core 或 Imgproc类进行调用)
  • tutorial-1-camerapreview:相机预览实例,介绍了如何使用OpenCV实现相机调用和预览显示。
  • turorial-2-mixedprocessing:混合处理实例,介绍了使用 Java 和 C 调用 OpenCV 来预处理相机预览帧的方法。
  • tutorial-3-cameracontrol:摄像头控制实例,介绍了基于OpenCV实现摄像头的基本操作,可以更改相机预览分辨率,调用相机内置效果,拍摄和保存图片,等一些相机的操作。

都是一些实例Demo。我们可以通过上面的例子了解一下。

2.2 sdk 目录

整个库最重要的内容就是sdk库了。

  • etc:各类模型文件存储地址,我们编译时不会编译到app中
    • haarcascades:人脸检测的模型数据,harr特征训练的文件。
    • lbpcascades:人脸检测的模型数据,lbp特征训练的文件。
    • licenses:存放opencv的各种开源许可证,包括开源项目的版权声明,使用条件,免责声明等等。
    • valgrind.supp:Valgrind内存泄漏检测工具配置文件。(我们使用SDK时并不会用上)
    • valgrind_3rdparty.supp:针对3rdparty模块的内存泄漏检测工具配置文件。(我们使用SDK时并不会用上)
  • java java版本api信息
    • android:一些基于Android的配置,例如自定义JavaCamera2View,Util工具(Bitmap与mat互转),OpenCVLoader(so库初始化等等)
    • calib3d:这个模块主要是相机定标校准和三维重建,立体视觉等功能。
    • core:该模块包含 OpenCV 库的基础结构以及基本操作。例如Mat,Core(基础运算操作),MatOfPoint,Rect2d,Size类等。
    • dnn:主要是深度神经网络模块。包括构建神经网络,加载序列化网络模型等。
    • engine:主要是处理dnn的引擎映射(现在只是一个aidl接口)
    • features2d:这个模块包含用于检测、描述以及匹配特征点的算法。也就是物体的2D特征。
    • imgcodecs:这个模块主要包括各种图形的读写操作。
    • imgproc:图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。
    • ml:主要是机器学习算法的实现,并且这些算法都能和 OpenCV 的数据类型自然交互。是一些视觉中最常用的传统机器学习算法
    • objdetect:这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。
    • osgi:主要是加载OpenCV native库的。
    • photo:这是一个相当新的模块,包含计算摄影学的一些函数工具。现在主要是处理图像修复和降噪等。
    • utils:Converters 工具类,主要处理各类数据(Byte,Point,RotatedRect,MatOfByte,Double)添加到Mat中。或者多Mat合成一个Mat等。
    • video:主要是对视频进行分析处理处理,例如运动估计,背景分离,对象跟踪等视频处理。
    • videoio:主要包括视频的读写操作。
    • javadoc :java API 帮助文档
    • src/org.opencv 关键目录
  • libcxx_helper :主要编译打包libc _shared.so 这个库。
  • native 原生代码
    • abi-xxxx:各类环境的cmake编译脚本。
    • include:对应的java的代码,java代码对应的jni实现 (更多的在java层进行了介绍。这里再加上一些java层没有的包)
    • flann:这个模块是高维的近似近邻快速搜索算法库,主要包含快速近似最近邻搜索与聚类等。
    • gapi:在加速常规的图像处理,这个模块主要充当框架而不是某些特定的计算机视觉算法。
    • highgui:高层GUI图形用户界面,包含创建和操作显示图像的窗口、处理鼠标事件以及键盘命令、提供图形交互可视化界面等等。
    • 3rdparty:第三方库(OpenCV中使用的其他第三方库的静态库)
    • jni:opencv jni层
    • libs:存放各种cpu类型的编译后的libopencv_java4.so动态库
    • staticlibs:存储各类静态库 libopencv_xxx.a文件

大概的目录结构就是这样的了。

而我们普通使用OpenCV的话,接触更多的应该是Core类,Mat类和Imgproc类吧。

OpenCV 在更新迭代过程中,目录结构也随时会发生变化。可能会有新增或者减少。当弄明白了大部分的目录结构,新增或者减少的部分,对我们影响并不大。

0 人点赞