openCV开源库模块组成部分以及介绍

openCV开源库模块组成部分以及介绍,第1张

简介

OpenC++V(Open Source Computer Vision Library: )是一个开源BSD库,该库包括数百个机器视觉算法。该手册基于OpenCV2.X API。是一个C++版本的API。

OpenCV是一个模块化结构,即由几个共享和静态库组成。模块如下:

core -一个定义基本数据结构的模块,包括多维数组和其它模块使用的核心函数

imgproc-图像处理模块,包括线性非线性滤波,几何图像变化(尺寸变换、仿射、透视、基于表的映射),图像域卷积,直方图等

video-视频分析模块,包括运动检测,背景移除,目标跟踪。

calib3d-多视图几何算法,一维和三维相机jiaozheng2,目标位置估计,立体匹配算法,三维重构。

features2d - 特征检测和描述匹配

objdetect -类(如人脸、眼睛、人、车等)的检测

highgui-视频抓取、图像以及视频编码接口

gpu- GPU对OpenCV不同模块算法的加速

...一些帮助性模块,如FLANN和谷歌测试封装,Python

API接口的概念

CV命名空间

所有OpenCV类和函数均位于cv命名空间。所以使用这些函数使用cv::标识符,或者using namespace cv指示符。
 

openCV开源库模块组成部分以及介绍,openCV开源库模块组成部分以及介绍,第2张

也就是Ptr ptr封装了一个T类型的实例和一个引用计数,参考ptr的详细描述。

输出数据的自动分配

OpenCV自动释放内存,如果大多数情况下自动为输出函数分配参数空间一样。所以,对于一个有一个或多个输入/出数组(如 cv::Mat)时,输出数组被自动分配或自动重新分配。输出数组的大小和类型由输入数组的大小和类型决定。如果需要,会有额外的参数指明数组的特性。

openCV开源库模块组成部分以及介绍,openCV开源库模块组成部分以及介绍,第3张

cv::uchar是一个OpenCV 8bit无符号类型。32为整型数不支持。

固定像素类型,有限的模板类型

大量使用模板也许会导编译和运行时间的增加,对于基本的算法使用模板较好,但对于一个有数千行的算法而言模板并不好。正是由于这个原因以及简化其它无模板语言(如Python、JavaMatlab)的算法实现,OpenCV倾向于使用多态和运行时调度等方法。

因此,可供使用的原始数据类型和库是一个有限的固定集合。即,阵列元素应当是下列类型:

openCV开源库模块组成部分以及介绍,openCV开源库模块组成部分以及介绍,第4张

更复杂的元素类型将不能被OpenCV创建和处理。此外,每一个函数仅能处理所有可能阵列的一个子集。通常越复杂的算法支持的子集越小。看下面的典型例子:
脸部识别只支持8-bit灰度和彩色图
线性函数和机器学习算法只支持浮点阵列。
基本函数,如cv::add,支持所有类型。
彩色变化支持8-bit、16-bit无符号和32-bit浮点数。
每个函数支持的类型根据实际使用而定,以后可能扩展。

输入和输出数组
许多OpenCV函数处理2或者多维数组。通常这些函数以cpp:class:Mat作为参数,但有时使用std::vector<>或者 Matx<>更方便,为了避免API重复,引入特殊的“代理”类。基本的代理类是InputArray,用于处理一个函数的只读数组。由InputArray 衍生出来的OutputArray用于处理一个函数的输出。通常不需要关心这类的中间类型。当一个函数有可选输入输出参数时,使用cv::noArray()传递。
错误处理
OpenCV使用异常标识严重错误。当输入数据类型和数据数据范围均正确时,但是算法发生了错误(如最优化算法不收敛),将返回一个特殊的错误码。

异常可能是cv::ExcepTIon类或其衍生实例,cv::ExcepTIon衍生于 std::excepTIon,所以可以使用C++库函数处理。

异常通常由CV_Error宏抛出,或者printf之类的CV_Error_和CV_Assert宏。 对于性能关键的代码,可使用CV_DbgAssert(condiTIon) ,由于内存自动管理,错误发生所需的内存会自动分配,如果需要,只需要添加一个用于抓住异常的try声明。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2603349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存