邂逅OpenCV
文章目录
前言
笔记系列
参考书籍:OpenCV3编程入门
作者:毛星云
版权方:电子工业出版社
出版日期:2015-02
笔记仅供本人参考使用,不具备共通性
笔记中代码均是OpenCV+Qt的代码,并非用vs开发,请勿混淆
1.1 OpenCV周边概念认知
1.1.1 图像处理、计算机视觉与OpenCV
-
图像处理
- Image Processing
- 计算机对图像进行分析,以达到所需结果的技术,又称影像处理
- 该技术包括
- 图像压缩、增强和复原
- 图像匹配、描述
- 图像识别
- 一般指数字图像处理(Digital Image Processing)
- 数字图像是一个大的二维数组
- 数组元素称为像素
- 数组值称为灰度
- 处理是指对数字图像进行
- 去除噪声
- 增强
- 复原
- 分割
- 提取特征
- 数字图像是一个大的二维数组
- 侧重于“处理”图像
-
计算机视觉
- Computer Vision
- 用设备代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理
- 侧重于使用计算机来模拟人的视觉
-
OpenCV
-
Open Source Computer Vision Library
-
一款基于开源发行的跨平台计算机视觉库
-
实现了图像处理和计算机视觉发面的很多通用算法
-
1.1.2 OpenCV概述
- Open Source Computer Vision Library
- 开源计算机视觉库
- 跨平台
- 设计目标
- 执行速度尽量快
- 关注实时应用
- 采用优化的C/C++代码编写
- 能够多核处理
- 提供MLL(Machine Learning Library)机器学习库
1.1.3 起源及发展
- 略
1.1.4 应用概述
- 人机交互
- 物体识别
- 图像分区
- 人脸识别
- 动作识别
- 运动跟踪
- 机器人
1.2 OpenCV基本架构分析
初学OpenCV时,先了解一下OpenCV的整体模块架构,再重点学习和突破自己感兴趣的部分,就会有得心应手,一览众山小的学习体验
通过OpenCV安装路径下include目录里面头文件的分类存放,来略读一下它的庞杂组织架构
进入到...\opencv\build\include\opencv2
目录
在该目录中,找到opencv_modules.hpp
的hpp文件
该文件中存放的是OpenCV2中与新模块构造相关的说明代码:
/*
* ** File generated automatically, do not modify **
* ** 文件自动生成,请勿修改 **
*
* This file defines the list of modules available in current build configuration
*
* 该文件定义了当前构建配置中可用的模块列表
*
*/
// This definition means that OpenCV is built with enabled non-free code.
// 这个定义意味着OpenCV是用启用的非自由代码构建的
// For example, patented algorithms for non-profit/non-commercial use only.
// 例如,专利算法只能用于非营利/非商业用途。
/* #undef OPENCV_ENABLE_NONFREE */
#define HAVE_OPENCV_CALIB3D
#define HAVE_OPENCV_CORE
#define HAVE_OPENCV_DNN
#define HAVE_OPENCV_FEATURES2D
#define HAVE_OPENCV_FLANN
#define HAVE_OPENCV_GAPI
#define HAVE_OPENCV_HIGHGUI
#define HAVE_OPENCV_IMGCODECS
#define HAVE_OPENCV_IMGPROC
#define HAVE_OPENCV_ML
#define HAVE_OPENCV_OBJDETECT
#define HAVE_OPENCV_PHOTO
#define HAVE_OPENCV_STITCHING
#define HAVE_OPENCV_VIDEO
#define HAVE_OPENCV_VIDEOIO
如上,L17~L31就是OpenCV的所有模块,按照宏定义的顺序依次介绍
- HAVE_OPENCV_CALIB3D ---- calib3d
- Calibration(校准)和3D这两个词的组合缩写
- 该模块主要是相机校准和三维重建相关的内容
- 算法包括
- 多视角几何算法
- 单个立体摄像头标定
- 物体姿态估计
- 立体相似性算法
- 3D信息的重建
- ……
- HAVE_OPENCV_CORE ---- core
- 核心功能模块
- 包含如下内容
- OpenCV基本数据结构
- 动态数据结构
- 绘图函数
- 数组操作相关函数
- 辅助功能与系统函数和宏
- 与OpenGL的互操作
- HAVE_OPENCV_DNN ---- dnn
- Deep Neural Network
- 深层神经网络模块
- 详细内容暂略
- HAVE_OPENCV_FEATURES2D ---- features2d
- 即Features2D
- 2D功能框架
- 包含内容如下
- 特征检测和描述
- 特征检测器通用接口
- 描述符提取器通用接口
- 描述符匹配器通用接口
- 通用描述符匹配器通用接口
- 关键点绘制函数和匹配功能绘制函数
- HAVE_OPENCV_FLANN ---- flann
- Fast Library for Approximate Nearest Neighbors
- 高位的近似近邻快速搜索算法库
- 包含内容如下
- 快速近似最近邻搜索
- 聚类
- HAVE_OPENCV_GAPI ---- gapi
- G-API(Graph API) - 超高效图像处理 pipeline 引擎已集成为opencv_gapi模块
- 这是一个新的 API,允许在流水线级别上对图像处理/CV 算法进行卸载和优化。
- 详细内容暂略
- HAVE_OPENCV_HIGHGUI ---- highgui
- 高层GUI图形用户界面
- 包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容
- HAVE_OPENCV_IMGCODECS
- define HAVE_OPENCV_IMGPROC
- HAVE_OPENCV_ML ---- ml
- Machine Learning
- 机器学习模块
- 基本上是统计模型和分类算法
- 包含如下内容:
- 统计模型
- 一般贝叶斯分类器
- K-近邻
- 支持向量机
- 决策树
- 提升
- 梯度提高树
- 随机树
- 超随机树
- 期望最大化
- 神经网路
- MLData
- HAVE_OPENCV_OBJDETECTL ---- objectect
- 目标检测模块
- 包含Cascade Classification(级联分类)和Latent SVM两大部分
- HAVE_OPENCV_PHOTO ---- photo
- Computational Photography
- 包含图像修复和图像去噪两部分
- HAVE_OPENCV_STITCHING ---- stitching
- images stitching
- 图像拼接模块
- 包含如下内容:
- 拼接流水线
- 特点寻找和匹配图像
- 估计旋转
- 自动校准
- 图片歪斜
- 接缝估测
- 曝光补偿
- 图片混合
- HAVE_OPENCV_VIDEO ---- video
- 视频分析组件
- 包括运动估计、背景分离、对象跟踪等视频处理相关内容
- HAVE_OPENCV_VIDEOIO ---- videoio
- 视频输入输出组件
- 主要是用来打开视频文件或者camera,输出对应文件/设备的流。
1.3 OpenCV3带来了什么
略
1.4 OpenCV的下载、安装与配置
此处主要提供Windows环境下Qt+Opencv的配置
转载文章: