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

FPGA/ASIC技术

193人已加入

描述

简介

OpenCV(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

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

输出数据的自动分配

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

OpenCV

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

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

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

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

OpenCV

更复杂的元素类型将不能被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声明。

OpenCV

多线程和重载
当前OpenCV支持完全的重载,相同的 cv::Mat 可以应用于不同的线程。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分