侧边栏壁纸
  • 累计撰写 416 篇文章
  • 累计创建 65 个标签
  • 累计收到 150 条评论

目 录CONTENT

文章目录

OpenCV 4.6 Android SDK 目录详解

Z同学
2022-09-23 / 0 评论 / 3 点赞 / 861 阅读 / 1,723 字
温馨提示:
本文最后更新于 2022-09-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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信息
    • javadoc :java API 帮助文档
    • src/org.opencv 关键目录
      • 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:主要包括视频的读写操作。
  • libcxx_helper :主要编译打包libc++_shared.so 这个库。
  • native 原生代码
    • 3rdparty:第三方库(OpenCV中使用的其他第三方库的静态库)
    • jni:opencv jni层
      • abi-xxxx:各类环境的cmake编译脚本。
      • include:对应的java的代码,java代码对应的jni实现 (更多的在java层进行了介绍。这里再加上一些java层没有的包)
        • flann:这个模块是高维的近似近邻快速搜索算法库,主要包含快速近似最近邻搜索与聚类等。
        • gapi:在加速常规的图像处理,这个模块主要充当框架而不是某些特定的计算机视觉算法。
        • highgui:高层GUI图形用户界面,包含创建和操作显示图像的窗口、处理鼠标事件以及键盘命令、提供图形交互可视化界面等等。
    • libs:存放各种cpu类型的编译后的libopencv_java4.so动态库
    • staticlibs:存储各类静态库 libopencv_xxx.a文件

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

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

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

3

评论区