02. OpenCV 4.5.1 -- 目录结构

opencv 目录结构

  • 通过opencv安装路径下 include目录(/usr/local/include/opencv4/)头文件的分类,来一窥OpenCV 组件架构
  • 查看源码的目录层次

opencv 顶层目录结构:

$ tree opencv/ -L 1
opencv/
├── 3rdparty
├── apps
├── cmake
├── CMakeLists.txt
├── CONTRIBUTING.md
├── COPYRIGHT
├── data
├── doc
├── include
├── LICENSE
├── modules
├── platforms
├── README.md
├── samples
└── SECURITY.md

在这里插入图片描述
cmake: 包含生成工程项目时cmake 的依赖文件,只能用于搜索第三方库,普通开发者不需要关心这个文件夹的内容。

3rdparty 目录

opencv/
├── 3rdparty
│   ├── carotene
│   ├── cpufeatures
│   ├── ffmpeg
│   ├── include
│   ├── ippicv
│   ├── ittnotify
│   ├── libjasper
│   ├── libjpeg
│   ├── libjpeg-turbo
│   ├── libpng
│   ├── libtengine
│   ├── libtiff
│   ├── libwebp
│   ├── openexr
│   ├── openjpeg
│   ├── openvx
│   ├── protobuf
│   ├── quirc
│   ├── readme.txt
│   ├── tbb
│   └── zlib

在这里插入图片描述3rdparty: 包含第三方库,如:

  • 视频解码用的 ffmpeg、
  • jpg、png、tiff 等图片的解码库。

apps 目录

├── apps
│   ├── annotation
│   ├── CMakeLists.txt
│   ├── createsamples
│   ├── interactive-calibration
│   ├── traincascade
│   ├── version
│   └── visualisation

在这里插入图片描述
apps: 包含进行 Haar 分类器训练的工具,
OpenCV 进行人脸检测便是基于 Haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。

data

├── data
│   ├── CMakeLists.txt
│   ├── haarcascades
│   ├── haarcascades_cuda
│   ├── hogcascades
│   ├── lbpcascades
│   ├── readme.txt
│   └── vec_files

在这里插入图片描述

data: 包含 OpenCV 库及范例中用到的资源文件

doc

doc: 包含生成文档所需的源文件辅助脚本

include

├── include
│   ├── CMakeLists.txt
│   └── opencv2

在这里插入图片描述
include: 包含入口头文件。
opencv2子文件夹中只有一个 opencv.hpp 文件,这是OpenCV 2OpenCV 3 推荐使用

modules

modules: 算法模块的源代码。研究算法的同学学习重点。

├── modules
│   ├── calib3d
│   ├── CMakeLists.txt
│   ├── core
│   ├── dnn
│   ├── features2d
│   ├── flann
│   ├── gapi
│   ├── highgui
│   ├── imgcodecs
│   ├── imgproc
│   ├── java
│   ├── js
│   ├── ml
│   ├── objc
│   ├── objdetect
│   ├── photo
│   ├── python
│   ├── stitching
│   ├── ts
│   ├── video
│   ├── videoio
│   └── world

在这里插入图片描述

modules/calib3d

  • Calibration(校准)加3D的组合缩写
  • 相机标定和三维重建。
  • 基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等
  • 相机标定用于取出相机自身缺陷导致的画面形变,还原真实的场景,确保计算的准确性。
  • 三维重建通常用在双目视觉(立体视觉),即两个标定后的摄像头观察同一个场景,通过计算两幅画面中的相关性来估计像素深度。

modules/core

核心功能模块,包含:

  • OpenCV基本数据结构
  • 动态数据结构
  • 绘图函数
  • 数组操作相关函数
  • 辅助功能与系统函数和宏
  • 与OpenGL的互操作

dnn

features2d

2D 特征值检测的框架 ,包含:

  • 特征检测和描述
  • 特征检测器(Feature Detectors)通用接口
  • 描述符提取器(Descriptor Extractors)通用接口
  • 描述符匹配器(Descriptor Matchers)通用接口
  • 通用描述符(Generic Descriptor)匹配器通用接口
  • 关键点绘制函数和匹配功能绘制函数

包含各种特征值检测器及描述子,如 FAST、MSER、OBRB、BRISK 等。各类特征值拥有统一的算法接口,因此在不影响程序逻辑的情况下可以替换替换。

flann

Fast Library for Approximate Nearest Neighbors,高维的近似近邻快速搜索算法库,包含:

  • 快速近似最近邻搜索
  • 聚类
    用于在多维空间内聚类及搜索的近似算法,做图像检索的开发者对它不会陌生。

gapi

highgui

高级图形界面,包括用户界面、Qt
high gui,高层GUI图形用户界面,包含:

  • 媒体的I/O输入输出,
  • 视频捕捉、
  • 图像和视频的编码解码、
  • 图形交互界面的接口

imgcodecs

对图像文件编解码、读写操作

imgproc

Image Processing(图像处理) 缩写
图像处理模块,包含:

  • 线性和非线性的图像滤波
  • 图像的几何变换
  • 其它(Miscellaneous)图像转换
  • 直方图相关
  • 结构分析和形状描述
  • 运动分析和对象跟踪
  • 特征检测
  • 目标检测等内容
    图像处理是计算机视觉的重要工具。

java

js

ml

Machine Learning,机器学习模块, 基本上是统计模型和分类算法,包含:

  • 统计模型 (Statistical Models)
  • 一般贝叶斯分类器 (Normal Bayes Classifier)
  • K-近邻 (K-NearestNeighbors)
  • 支持向量机 (Support Vector Machines)
  • 决策树 (Decision Trees)
  • 提升(Boosting)
  • 梯度提高树(Gradient Boosted Trees)
  • 随机树 (Random Trees)
  • 超随机树 (Extremely randomized trees)
  • 期望最大化 (Expectation Maximization)
  • 神经网络 (Neural Networks)
  • MLData

objc

objdetect

目标检测模块,包含:

  • Cascade Classification(级联分类)
  • Latent SVM
    包括 Haar 分类器、SVM 检测器及文字检测。

photo

计算摄影学,包括:

  • 图像修补、
  • 去噪、
  • HDR 成像、
  • 非真实感渲染等
    实现 Photoshop 的高级功能,这个模块必不可少。

python

ocl

OpenCL-accelerated Computer Vision,运用OpenCL加速的计算机视觉组件模块

photo

Computational Photography,包含:

  • 图像修复
  • 图像去噪

stitching

images stitching,图像拼接模块,包含:

  • 拼接流水线
  • 特点寻找和匹配图像
  • 估计旋转
  • 自动校准
  • 图片歪斜
  • 接缝估测
  • 曝光补偿
  • 图片混合
    可用于制作全景图

ts

opencv测试相关代码

video

视频分析组件,包括:

  • 运动估计,
  • 背景分离,
  • 对象跟踪

videoio

视频编解码、读写操作

world

platforms

platforms: 包含交叉编译所需的工具链额外的代码

├── platforms
│   ├── android
│   ├── apple
│   ├── ios
│   ├── js
│   ├── linux
│   ├── maven
│   ├── osx
│   ├── readme.txt
│   ├── scripts
│   ├── wince
│   ├── winpack_dldt
│   └── winrt

samples

samples:算法用法示例文件夹

├── samples
│   ├── android
│   ├── CMakeLists.example.in
│   ├── CMakeLists.txt
│   ├── cpp
│   ├── data
│   ├── directx
│   ├── dnn
│   ├── gpu
│   ├── hal
│   ├── install
│   ├── java
│   ├── opencl
│   ├── opengl
│   ├── openvx
│   ├── python
│   ├── samples_utils.cmake
│   ├── swift
│   ├── sycl
│   ├── tapi
│   ├── va_intel
│   ├── _winpack_build_sample.cmd
│   ├── _winpack_run_python_sample.cmd
│   ├── winrt
│   ├── winrt_universal
│   └── wp8

在这里插入图片描述

  • android: Android 平台的范例。含有完全是 Java的工程,完全是 C++ 的工程,Java 与 C++ 共存的工程。

  • cpp: 由于 OpenCV 是一款 C++ 库,因此 C++ 的范例是最多的

  • data: 示例程序要用到的数据

  • directx(d3d): 微软的私有三维图像 API,范例覆盖了 d3d9、d3d10、d3d11.

  • gpu: 利用 cuda 加速的范例

  • java: OpenCV 3 官方支持 Java 语言绑定,演示如何使用 Java 版本的 OpenCV。

  • python: OpenCV 3 官方支持 Python 语言绑定,演示使用 Python 2 版本的范例。

  • tapi: OpenCV 3 的一个新特性,使用 cv::UMat 替代cv::Mat,实现 CPU 和 GPU 的运算使用统一的接口,不再需要显式地在 CPU 和 GPU 之间传递数据,方便开发人员。

  • winrt: Windows RT 平台的范例,开发语言是微软的 C++ “方言”.

samples/cpp

tutorial_code/: opencv教程代码

  • 3calibration.cpp: 同时标定三台水平放置的相机。
  • bagofwords_classification.cpp: 使用图像检测实现简易的图像搜索功能。
  • bgfg_gmg.cpp: 演示GMG 背景检测算法的使用方式。
  • bgfg_segm.cpp: 演示高斯混合背景检测算法的使用方式。
  • brief_match_test.cpp: 使用 BRIEF 特征值来匹配两张图像。
  • build3dmodel.cpp: 演示如何使用基础矩阵和特征值来创建三维模型。
  • calibration.cpp: 完整的多用途标定程序。
  • calibration_artificial.cpp: 在程序中生成一个虚拟的相机,并进行标定。
  • camshiftdemo.cpp: 读取实时的摄像头数据,并演示基于均值偏移算法的视频跟踪。
  • chamfer.cpp: 使用Chamfer 算法匹配两副边缘图像。
  • cloning_demo.cpp: 命令行模式的图像克隆。
  • cloning_gui.cpp: 图形界面交互的图像克隆。
  • connected_components.cpp: 查找并绘制图像中的连通区域。
  • contours2.cpp: 查找并绘制图像中的轮廓。
  • convexhull.cpp: 查找并绘制由点的集合组成的凸包。
  • cout_mat.cpp: 使用cout 来输出各种格式化的 Mat 对象。
  • create_mask.cpp: 演示如何创建黑白掩码图像。
  • dbt_face_detection.cpp: 基于检测的人脸跟踪代码。
  • delaunay2.cpp: 通过鼠标交互式地生成 Delaunay 三角形。
  • demhist.cpp: 演示直方图的用法。
  • descriptor_extractor_matcher.cpp: 演示 features2d 检测框架的用法。
  • detection_based_tracker_sample.cpp: 与 dbt_face_detection.cpp 类似。
  • detector_descriptor_evaluation.cpp: 评估各种特征检测器和描述子。
  • detector_descriptor_matcher_evaluation.cpp:评估各种特征检测器和匹配器。
  • dft.cpp: 演示一幅图像的离散傅里叶变换。
  • distrans.cpp: 显示边缘图像的距离变换值。
  • drawing.cpp: 演示绘画和文字显示功能。
  • edge.cpp: 演示Canny 边缘检测。
  • em.cpp: 对随机生成的数据点进行 EM 聚类。
  • fabmap_sample.cpp: 演示 FAB-MAP 图像检索算法。
  • facerec_demo.cpp: 人脸识别。
  • fback.cpp: 实时的Farneback 光流跟踪。
  • ffilldemo.cpp: 演示 floodFill() 像素填充算法。
  • filestorage.cpp: 演示序列化到外部文件,如yml、xml等。
  • fitellipse.cpp: 将轮廓点匹配到椭圆。
  • freak_demo.cpp: 演示 FREAK 特征值的用法。
  • gencolors.cpp: 演示 generateColors()。
  • generic_descriptor_match.cpp: 基于 SURF 的两幅图像间的匹配。
  • grabcut.cpp: 演示GrabCut 分割算法。
  • houghcircles.cpp: 用霍夫算法检测圆。
  • houghlines.cpp: 用霍夫算法检测直线。
  • hybridtrackingsample.cpp: 混合跟踪算法(Hybrid Tracker)的演示。
  • image.cpp: 来回转换cv::Mat 和 IplImage。
  • image_alignment.cpp: 演示 findTransformECC() 函数。
  • image_sequence.cpp: 使用 VideoCapture 对象读取序列帧。
  • imagelist_creator.cpp: 创建图像列表到 xml 文件。
  • inpaint.cpp: 使用鼠标交互地进行图像修补。
  • intelperc_capture.cpp: Intel 感知计算设备相关的函数。
  • kalman.cpp: 使用卡尔曼滤波进行二维跟踪。
  • kmeans.cpp: Kmeans 聚类算法的演示。
  • laplace.cpp: 拉普拉斯边缘检测。
  • latentsvm_multidetect.cpp: latentSVM 检测器。
  • letter_recog.cpp: 字母识别。
  • linemod.cpp: 基于OpenNI 的体感设备应用。
  • lkdemo.cpp: 演示Lukas-Kanade光流法。
  • logpolar_bsm.cpp: 演示 LogPolar 盲点模型。
  • lsd_lines.cpp: LSD 线段检测。
  • matcher_simple.cpp: SURF 特征检测。
  • matching_to_many_images.cpp: 一对多的特征检测。
  • meanshift_segmentation.cpp: 演示基于均值漂移的色彩分割函数——meanShiftSegmentation()
  • minarea.cpp: 寻找最小包围盒、包围圆
  • morphology2.cpp: 形态学图像处理
  • npr_demo.cpp: 演示各种非真实感渲染效果
  • opencv_version.cpp: 输出 OpenCV 库的版本号
  • openni_capture.cpp: 演示 OpenNI 相关的体感设备
  • pca.cpp: 基于 PCA 的人脸识别
  • peopledetect.cpp: 基于 cascade 或 hog 进行物体(人)检测
  • phase_corr.cpp: 演示 phaseCorrelate() 函数
  • points_classifier.cpp: 演示各种机器学习算法
  • segment_objects.cpp: 实时地在视频或相机画面中检测前景物体
  • select3dobj.cpp:在一个有标定棋盘的桌子上,使用3D Box标记一个对象,在所有序列帧中,只要照相机可以看到棋盘,就可以跟踪对象,并用Box分割对象
  • shape_example.cpp: 比较并检索形状
  • shape_transformation.cpp: 用 SURF 特征值检测形状并进行变换
  • squares.cpp: 检测图像中的方块形状。
  • starter_imagelist.cpp: 加载一个ImageList(由imagelist_creator.cpp产生)
  • stereo_calib.cpp: 双目视觉的标定
  • stereo_match.cpp: 计算左右视觉的图像的差异,生成点云文件。
  • stitching.cpp: 演示图像拼接算法。
  • stitching_detailed.cpp: 演示更多参数的图像拼接算法。
  • train_HOG.cpp: 训练 HOG 分类器
  • tree_engine.cpp: 演示如何使用不同的决策树和森林包括Boosting和随机树
  • videostab.cpp: 演示 videostab 中各个参数的用法。
  • watershed.cpp: 演示著名的分水岭图像分割算法。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值