首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenCV 学习笔记(一)认识 OpenCV

0x01 认识 OpenCV

OpenCV 官网主页 : https://opencv.org

OpenCV github 主页 : https://github.com/opencv

OpenCV 中文网 : http://www.opencv.org.cn

0x02 OpenCV 基本架构分析

官网下载 OpenCV , 解压放到 D 盘, 进入到 目录, 可以看到有 和 两个文件夹。 里面包含了旧版的头文件, 而 则包含了新版的稳定的 OpenCV2 系列头文件。

里面 11 个头文件, 大概是 OpenCV 1.0 最核心的, 我们可以理解为一个大组件。

再来看看 里面的文件很多, 其中会有一个 的 hpp 文件, 里面是 OpenCV 所有组件的宏, 具体如下。

按照宏定义的顺序依次介绍。如下:

1. 「 calib3d 」 Calibration(校准) 和 3D 这两个词组合缩写。 该模块主要是相机校准和三维重建相关的内容, 包括基本的多视角几何算法、单个立体摄像头标定、物体姿态估计、立体相似性算法、3D 信息的重建等。

2. 「 contrib 」 contributed/Experimental Stuf 的缩写。 该模块包含了一些近期添加的可选性功能, 不用去多管, 例如新增的 人脸识别、立体匹配、人工视网膜模型等技术。

3. 「 core 」核心功能模块, 包含了下面的内容。

OpenCV 基本数据结构。

动态数据结构。

绘图函数。

数组操作相关函数。

辅助功能与系统函数和宏。

与 OpenGL 的互操作。

4. 「 imgproc 」 image 和 process 两个单词的缩写组合。 图像处理模块, 包含以下内容。

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

图形几何变换。

其他 (Miscellaneous) 图像转换。

直方图相关。

结构分析和形状描述。

运动分析和对象跟踪。

特征检测。

目标检测等内容。

5. 「 features2d 」 Features2D, 即 2D 功能框架, 包含如下内容。

特征检测和描述。

特征检测器 (Feature Detectors) 通用接口。

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

描述符匹配器 (Descriptor Matchers) 通用接口。

通用描述符 (Generic Descriptor) 匹配器通用接口。

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

6.「 flann 」 Fast Library for Approximate Nearest Neighbors, 高维的近似近邻快速搜索算法库, 包含以下两个部分:

快速近似最近邻搜索。

聚类。

7. 「 gpu 」运用 GPU 加速的计算机视觉模块。

8. 「 highgui 」 高层 GUI 图形用户界面, 包含了媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容。

9. 「 legacy 」 一些废弃的代码库, 保留下来作为向下兼容, 包含如下内容:

运动分析。

期望最大化。

直方图。

平面细分(C API)。

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

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

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

匹配器。

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

统计模型 (Statistical Models)。

一般贝叶斯分类器 (Normal Bayes Classifier)。

K-近邻 (K-Nearest Neighbors)。

支持向量机 (Support Vector Machines)。

决策树 (Decision Trees)。

提升 (Boosting)。

梯度提高树 (Gradient Boosted Trees)。

随机树 (Random Trees)。

超随机树 (Extremely randomized trees)。

期望最大化 (Expectation )。

神经网络 (Neural Networks)。

MLData 。

11. 「 nonfree 」 一些专利的算法模块, 包含特征检测和 GPU 相关的内容, 最好不要商用。

12. 「 objdetect 」 目标检测模块, 包含 Cascade Classification(级联分类) 和 Latent SVM 这两个部分。

13. 「 ocl 」 OpenCL-accelerated Computer Vision, 运用 OpenCL 加速的计算机视觉组件模块。

14. 「 photo 」 Computational Photography, 包含了图像修复和图像去噪两部分。

15. 「 stiching 」 images stitching, 图像拼接模块, 包含以下部分:

拼接流水线。

特点寻找和匹配图像。

估计旋转。

自动校准。

图片歪斜。

接缝估测。

曝光补偿。

图片混合。

16. 「 superres 」 SuperResolution, 超分辨率技术的相关功能模块。

17. 「 ts 」 OpenCV 测试相关代码, 不用去管。

18. 「 video 」 视频分析组件, 该模块包含运动估计、背景分离、对象跟踪等视频处理相关内容。

19. 「 Videostab 」 Video stabilization, 视频稳定相关的组件, 官方文档中没有多做介绍, 不用管它。

这样一来, 对 OpenCV 的模块框架就有了一定的认识, 其实就是很多个模块组合起来的一个 软件包, 也叫 SDK (Software Development Kit, 软件开发工具包) 并没有多稀奇。

OpenCV 2.0 的发布也就意味着 OpenCV2 时代的来临。 2 带来了全新的 C++ 接口, 同时新增了新的平台支持, 包括 iOS 和 Android, 通过 CUDA 和 OpenCL 实现了 GPU 加速, 为 Python 和 Java 用户提供了接口。都说稳定易用的OpenCV 2.4.x

0x03 架构的改变

然而随着功能的增加, OpenCV 主体集成了各种各样的功能模块, 变得越来越臃肿。 这时, 3.0 的出现, 就是为了造福人类 。 OpenCV3 决定像其他大项目一样, 抛弃整体架构, 使用内核 + 插件的架构形式。

在 GitHub 主页, 可以看到除了一个 仓库, 还有一个 仓库显示在上方。这个新仓库中有很多好玩的功能 : 包括脸部识别和文本探测, 以及文本识别、新的边缘检测器、充满艺术感的图像修复、深度地图处理、新的光流和追踪算法等。

opencv 和 opencv_contrib 仓库的区别

都由 OpenCV 官网开发团队持续集成系统维护, 虽然可能新的仓库很多功能不稳定。

opencv 仓库在 GitHub 中由 Itseez 提供, 其有着非常稳定的 API 以及少部分的创新。

opencv_contirb 仓库是大多数实验性代码放置的地方, 一些 API 可能会有改变, 一直会欢迎广大开发者们贡献新的精彩算法。

opencv_contirb 中这些额外模块可以在 CMake 中使用 传递给 CMake 文件, 和 OpenCV3 主体中的代码一起编译运行。

opencv_contirb 的文档是自动生成的, 在 GitHub 仓库 readme.md 也包含了, https://docs.opencv.org/master/ 。

0x04 实践

首先 Windows 下需要安装 visual studio , 我选择的是 2012 + OpenCV2.4.13, 2.4.x 相对来说稳定。

将 opencv2.4.13 下载到电脑, 直接解压放到 D 盘 根目录, 使用了 浅墨 的 HelloOpenCV 工程项目。 需要注意, 工程下载过来, 还需要根据自己的电脑配置环境变量, 项目里面需要配置通用属性。

通用属性配置 :

VC++ Directories , 配置 Include 目录和 Library 目录。

链接库输入配置: Linker->Input 输入一堆

2.4.13 输入如下 :

这样就能跑起来了, 环境变量需要根据自己电脑解压的目录进行设置。

此篇作为学习 OpenCV 的第一篇, 坚持学习下去。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G01HI100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券