标签:
在家这段时间内,发现了这样的OpenCV库自带的教程,感觉不错,尝试翻译并且添加一些tips,帮助自己学习,同时也与各位交流一下。
核心模块.核心功能
这里这两部分说的是核心模块以及核心功能的简介,其中蓝字部分可以链接到相关部分,这里我采用顺序方法,从第一部分,即 “Mat:The Basic Image Container”开始叙述。
2.1 基本的图像容器—矩阵
目标
我们可以通过许多途径从真实世界获取数字图像,例如:数码相机、扫描仪、计算机断层扫描以及磁成像共振等等。不管怎样,那些都只是我们人类所看到的图像。然而,当把这些图像传输到数码设备中时,则需要把图像中的每个点按照数字化存储。
例如,在上面的图像中,可以看到汽车的后视镜在计算机中无非是用一个矩阵来包括所有的像素点的强度值(intensity values)。我们可以根据我们的需求来存取这些像素值,但是在计算机世界中,所有的图像可能最终都会被简化为数字化的矩阵以及用于描述这个矩阵的其他信息。OpenCV就是一个主要专注于处理和操纵这些信息的计算机视觉库。因此,我们需要做的第一件事情就是去了解并熟悉OpenCV这个库是如何存储和操纵图像的。
矩阵
OpenCV在2001年已经出现了。在那时OpenCV库使用C语言作为其接口语言,并且使用被称为IplImage的这样的一个C语言的结构体作为其图像存储结构。这些东西将会在大部分老旧的教材和手册中出现。伴随而来的一系列和C相关的问题,进行内存管理成为这其中最大的问题。早期的OpenCV库编译的基础在于它假设用户会负责进行内存的管理,例如内存分配以及析构。这些在小的程序的开发过程中都不是什么问题,一旦你的代码量开始大幅度增加,内存管理也就成了你实现你开发目的的一个很大的羁绊。
十分幸运的是,C++的诞生引入了类的概念,从而或多或少的使用户从内存管理这个泥潭中得到解放。C++可以完全兼容C,因此这样的改变不会出现兼容问题。因此OpenCV 2.0这个版本引入新的C++语言接口,这个接口可以提供一种新的方法,使用户摆脱内存管理,简洁代码(写得少,自动实现的多)。C++实现的OpenCV接口的不利之处也就是在只支持C语言的嵌入式系统中无法使用。因此,除非你要在嵌入式平台中开发,否则还是使用C++的OpenCV借口吧(除非你你是一个有受虐倾向的程序员或者你想要找点麻烦)。
OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Mat - The Basic Image Container
标签:
原文地址:http://www.cnblogs.com/dmq5488287/p/4495272.html