zoukankan      html  css  js  c++  java
  • 学习 opencv---(1) opencv3.1.0 组件结构浅析

       本系列是根据 浅墨大神 的opencv系列而写的,,应该大部分内容会一样。。如有侵权还请告知。。。。。。。。。。。

       开发环境:win7 + VS2013 + opencv3.1.0

       至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构。

       我们进入到D:opencvuildinclude目录,可以看到有opencv和opencv2这两个文件夹。显然,opencv这个文件夹里面包含着旧版的头文件。而opencv2这个文件夹里面包含着具有时代意义的新版OpenCV2系列的头文件。

       

          在opencv这个文件夹里面,也就是D:opencvuildincludeopencv目录下,可以看到如下的各种头文件。这里面大概就是opencv 1.0最核心的,而且保留下来的内容的头文件,可以把它们整体理解为一个组件。

       

        再来看看我们重点关注的opencv2这边,在D:opencvuildincludeopencv2目录下,我们可以看到这些文件夹:

        

          

        我们灵机一动,发现下面有个叫opencv_modules.hpp的hpp文件,一看就知道里面存放的是opencv2中的新模块构造相关的说明代码,打开一看,果不其然,定义的是OpenCV2所有组件的宏:

       

        OK,就不多客套了,下面就是OpenCV的所有模块介绍,按照顺序来:

        【calib3d】:  其实就是calibration (校准) +3D 这俩个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。。

         

      【contrib】: 也就是contributed/experimental stuf 的缩写,该模块包含了一些最近添加的不太稳定的可选功能,不用去多管。2.4.8里的这个模块有新型人脸识别,立体匹配,人工视网膜模型等技术。(不过这个包2.4.13里没有)

        【core】: 核心功能模块:

                     (1)opencv基本数据结构 

                     (2)动态数据结构

                     (3)绘图函数

                     (4)数组操作相关函数

                     (5)辅助功能与系统函数和宏

                     (6)与 opengl 的互操作

        

      【feature2d】;也就是feature2d ,2d功能框架:

               ---特征检测和描述

               ---特征检测器(feature detectors)通用接口

               ----描述符提取器(descriptor extractors)通用接口

               -----描述符匹配器(descriptor match)

              -----通用描述符(generic descriptor)匹配器通用接口

              -----关键点绘制函数和匹配功能绘制函数

       【flann】:fast library for approximate nerarest neighbors ,高维的近似近邻快速搜索算法库(这个模块也没有)

            ---快速近似最近邻搜索

             ----聚类

       【gpu】运用GPU加速的计算机视觉模块(没有)

       【highgui】:也就是high gui ,高层GUI图形用户界面,包含媒体的I/O 输入输出,视频捕捉,图像和视频的编码解码,图形交互界面的接口内容

       【imgcodecs】:负责各种格式的图片的读写,这个模块是从以前的highgui 中剥离的

      

      【imgproc】:   image 和processing 这俩个单词的缩写组合。即图像处理模块:

                      ---线性和非线性的图像滤波

                      ---图像的几何变换

                     ----其它(miscellaneous)图像转换

                     -----直方图相关

                     -----结构分析和形状描述

                    ----- 运动分析和对象追踪

                     ----特征检测

                   ------目标检测等内容

       【ml】——Machine Learning,机器学习模块, 基本上是统计模型和分类算法,包含如下内容:

                 ---统计模型(statistical models)

                ---一般贝叶斯分类器(normal bayes classifier)

                ---K-近邻(K-nearesneighbors)

                ---支持向量机(support vector machines)

                ---决策树(decision tress)

               ---提升(boosting)

                ---梯度提高树(gradient boosted tress)

               ---随机树(random tress)

                ---超随机树(extremely randomized tress)

               --期望最大化(expectation maximization)

               ---神经网络(neural networks)

               ---MLDATA

      【legacy】; 一些已经废弃的代码库,保留下来作为向下兼容(这个模块没有)

               --- 运动分析

               ---期望最大化

               ---直方图

              ---平面细分(C api)

              ---特征检测和描述(Feature Detection and Description

                ---描述符提取器(Descriptor Extractors)的通用接口

                ----通用描述符(Generic Descriptor Matchers)的常用接口

                  ---匹配器

      【nonfree】 : 一些具有专利的算法模块,包含特征检测和GPU相关的内容,最好不要商用,可能会被告(没有)

        【objdetect】: 目标检测模块,包含cascade classification(级联分类)和 latent SVM 这俩个部分

      【photo】: 就是computational photography ,包含图像修复和图像去噪两部分

     

       【shape】;形状匹配算法模块。用于描述形状,比较形状

       【stitching】: image stitching,图像拼接模块

               ---拼接流水线

               ---特点寻找和匹配图像

               ---估计旋转

               ---自动校准

               ---图片歪斜

               ---接缝估测

              ---曝光补偿

              ---图片混合

       

      【superres】: superresolution,超分辨技术的相关功能模块

       【video】:视频分析组件,该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容

     

      【videoio】 ;负责视频文件的读写,也包括摄像头,kinect等的输入 

     

       【videostab】: video stabilization .视频稳定相关的组件,官方文档中没有多作介绍,不管了

      介绍一个博客:http://www.cnblogs.com/zengcv/p/5716265.html  里面有比较详细的介绍

       

    看到到这里,相信大家已经对OpenCV的模块架构设计有了一定的认识。

    OpenCV其实就是这么多模块作为代码容器组合起来的一个SDK而已,没什么稀奇的,对吧。

  • 相关阅读:
    如何自己手写一个热加载(转)
    阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
    Java NIO浅析 转至 美团技术团队
    mysql在线修改表结构大数据表的风险与解决办法归纳(转)
    MySQL性能优化
    Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
    redis 单线程的理解
    Spring 中的bean 是线程安全的吗?
    Spring 自定义注解,结合AOP,配置简单日志注解 (转)
    redis 分布式锁
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6200623.html
Copyright © 2011-2022 走看看