Opencv 学习笔记

简介

图像处理(Image Processing)是用计算机对图像进行分析,以达到所需结果的技术,又称影像处理。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。图像处理一般指数字图像处理(Digital Image Processing)。其中,数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组。该数组的元素称为像素,其值称为灰度值。而数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。

计算机视觉(Computer Vision)是一门研究如何使机器“看”的科学,具体地说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,用电脑处理使之成为更适合人眼观察或传送给仪器检测的图像的一门学科。作为一门科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取“信息”的人工智能系统。因为感知可以看做是从感官信号中提取信息,所以计算机视觉也可以看做是研究如何使人工系统从图像或多维数据中“感知”的科学。

图像处理和计算机视觉的区别在于:图像处理侧重于“处理”图像——如增强,还原,去噪,分割,等等;而计算机视觉重点在于使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标。

而OpenCV(Open Source Computer Vision Library),是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已经成为了计算机视觉领域最有力的研究工具之一。

OpenCV的初衷:

  • 为基本的视觉应用提供开放且优化的源代码,以促进视觉研究的发展,从而有效地避免“闭门造车”。
  • 通过提供一个通用的架构来传播视觉知识,开发者可以在这个架构上继续开展工作,所以代码应该是非常易读且可改写的。
  • OpenCV库采用的协议不要求商业产品继续开放代码,这使得可移植的、性能被优化的代码可以自由获取,可以促进基于视觉的商业应用的发展。

模块

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

【contrib】——Contributed/Experimental Stuf的缩写。该模块包含了一些最近添加的不太稳定的可选功能,不用去多管。新增了新型人脸识别、立体匹配、人工视网膜模型等技术。

【core】——核心功能模块,包含如下内容:

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

【imgproc】——Image和Process这两个单词的缩写组合,图像处理模块。包含如下内容:

  • 线性和非线性的图像滤波
  • 图像的几何变换
  • 其他(Miscellaneous)图像转换
  • 直方图相关
  • 结构分析和形状描述
  • 运动分析和对象跟踪
  • 特征检测
  • 目标检测等内容

【features2d】——也就是Features2D,即2D功能框架,包含如下内容:

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

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

扫描二维码关注公众号,回复: 11379864 查看本文章
  • 快速近似最近邻搜索
  • 聚类

【gpu】——运用GPU加速的计算机视觉模块。

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

【legacy】——一些已经废弃的代码库,保留下来作为向下兼容,包含如下内容:

  • 运动分析
  • 期望最大化
  • 直方图
  • 平面细分(C API)
  • 特征检测和描述(Feature Detection and Description)
  • 描述符提取器(Descriptor Extractors)的通用接口
  • 通用描述符(Generic Descriptor Matchers)的常用接口
  • 匹配器

【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 Maximization)
  • 神经网络(Neural Networks)
  • MLData

【nonfree】——一些具有专利的算法模块,包含特征检测和GPU相关的内容。最好不要商用。

【objdetect】——目标检测模块,包含Cascade Classification(级联分类)和Latent SVM这两个部分。

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

【photo】——Computational Photography,包含图像修复和图像去噪两部分

【stitching】——images stitching,图像拼接模块,包含如下部分:

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

【superres】——SuperResolution,超分辨率技术的相关功能模块。

【ts】——OpenCV测试相关代码,不用去管。

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

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

正式版opencv与opencv_contrib之间的区别:
正式版opencv是稳定版本,opencv_contrib是新增但不稳定版本。

core组件

Mat数据解构

Mat类由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。

Mat类使用引用计数功能,复制时只复制数据头,而共用同一个矩阵数据,当最后一个引用成员销毁时,引用计数为0,数据矩阵被销毁。

Mat A, C; // 仅创建信息头部分
A = imread(“1.jpg”, CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存
Mat B(A); //使用拷贝构造函数
C = A; //赋值运算符

但某些时候你仍会想复制矩阵本身(不只是信息头和矩阵指针),这时可以使用函数clone( )或者copyTo( )。

Mat F = A.clone( );
Mat G;
A.copyTo(G);

Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类,我们也可以用它来创建和操作多维矩阵。

像素值的存储方法

颜色系统有很多,它们各有优势,具体如下。

  • RGB是最常见的,这是因为人眼采用相似的工作机制,它也被显示设备所采用
  • HSV和HLS把颜色分解成色调、饱和度和亮度/明度。这是描述颜色更自然的方式,比如可以通过抛弃最后一个元素,使算法对输入图像的光照条件不敏感
  • YCrCb在JPEG图像格式中广泛使用
  • CIE L* a* b* 是一种在感知上均匀的颜色空间,它适合用来度量两个颜色之间的距离

猜你喜欢

转载自www.cnblogs.com/chendeqiang/p/13200942.html
今日推荐