OpenCV及基本用法

一.OpenCV介绍

1.OpenCV 的全称是 Open Source Computer Vision Library,是一个开放源代码的

计算机视觉库。OpenCV 是最初由英特尔公司发起并开发,以 BSD 许可证授权发

行,可以在商业和研究领域中免费使用,现在美国 Willow Garage 为 OpenCV 提

供主要的支持。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别

程序,目前在工业界以及科研领域广泛采用。

2.OpenCV 的来源

OpenCV 诞生于 Intel。Intel 最初希望提供一个计算机视觉库,使之能充分发

掘 CPU 的计算能力,当然更希望以此促进 Intel 的产品的销售。

在 2008 年,一家美国公司,Willow Garage2,开始大力支持 OpenCV,Vadim

Pisarevsky 和 Gary Bradski 都加入了 Willow Garage。Gary Bradski 也是 OpenCV 开

发者中的元老级人物,他曾出版《Leaning OpenCV》一书,广受欢迎。

Willow Garage 是一家机器人公司,致力于为个人机器人开发开放的硬件平

台和软件。现在已经开发了 PR2 机器人,并支持 ROS、OpenCV、PCL 等软件。ROS

(Robot Operating System)是用于机器人的操作系统,是一个开放源代码的软件,

OpenCV 作为 ROS 的视觉模块嵌入。

自从获得 Willow Garage 支持后,OpenCV 的更新速度明显加快。大量的新特

性被被加入 OpenCV 中,很多算法都是最近一两年的新的科研成果。OpenCV 正

日益成为算法研究和产品开发不可缺少的工具。

3.OpenCV 的协议

OpenCV 采用 BSD 协议,这是一个非常宽松的协议。简而言之,用户可以修

改 OpenCV 的源代码,可以将 OpenCV 嵌入到自己的软件中,可以将包含 OpenCV

的软件销售,可以用于商业产品,也可以用于科研领域。BSD 协议并不具有“传

染性”,如果你的软件中使用了 OpenCV,你不需要公开代码。你可以对 OpenCV

做任何操作,协议对用户的唯一约束是要在软件的文档或者说明中注明使用了

OpenCV,并附上 OpenCV 的协议。

在这个宽松协议下,企业可以在 OpenCV 基础之上进行产品开发,而不需要

担心版权问题(当然你要注明使用了 OpenCV,并附上 OpenCV 的协议)。科研领

域的研究者,可以使用 OpenCV 快速地实现系统原型。因此可以这样说,OpenCV

的协议保证了计算机视觉技术快速的传播,让更多的人从 OpenCV 受益。

二.OpenCV的基本用法

1.Mat 类

早期的 OpenCV 中,使用 IplImage 和 CvMat 数据结构来表示图像。IplImage

和 CvMat 都是 C 语言的结构。使用这两个结构的问题是内存需要手动管理,开

发者必须清楚的知道何时需要申请内存,何时需要释放内存。这个开发者带来了

一定的负担,开发者应该将更多精力用于算法设计,因此在新版本的 OpenCV 中

引入了 Mat 类。

新加入的 Mat 类能够自动管理内存。使用 Mat 类,你不再需要花费大量精

力在内存管理上。而且你的代码会变得很简洁,代码行数会变少。但 C++接口唯

一的不足是当前一些嵌入式开发系统可能只支持 C 语言,如果你的开发平台支持

C++,完全没有必要再用 IplImage 和 CvMat。在新版本的 OpenCV 中,开发者依

然可以使用 IplImage 和 CvMat,但是一些新增加的函数只提供了 Mat 接口。本书

中的例程也都将采用新的 Mat 类,不再介绍 IplImage 和 CvMat。

Mat 类的定义如下所示,关键的属性如下方代码所示:

class CV_EXPORTS Mat

{

public:

//一系列函数

/* flag 参数中包含许多关于矩阵的信息,如:

-Mat 的标识

-数据是否连续

-深度

-通道数目

*/

int flags;

//矩阵的维数,取值应该大于或等于 2

int dims;

//矩阵的行数和列数,如果矩阵超过 2 维,这两个变量的值都为-1

int rows, cols;

//指向数据的指针

uchar* data;

//指向引用计数的指针

//如果数据是由用户分配的&#

你可能感兴趣的:(opencv,人工智能,计算机视觉)