计算机视觉及OpenCV介绍
当我们清醒的时候,很大程度上是通过视觉来从世界获得信息。我们的眼睛不停的转动使得我们可以随时注意到需要了解的事物。更赞的是,我们的大脑将双眼读到的信息处理成围绕着的一个三维世界,并使我们知道在其中的位置及方向。那要是机器人如果能像我们一样能够看见并能理解事物会是多么的酷啊。
OpenCV
OpenCV (Open-source Computer Vision, opencv.org)是计算机视觉方面的瑞士军刀。它有着非常多的模块能够帮你解决一大堆的计算机视觉难题。但OpenCV最有用的地方可能会是它自身的架构及内存管理,为你提供一个可以随意处理图片和视频的框架,可以使用OpenCV或者你自己的算法,而不用担心分配和释放图片的内存。
内置模块
OpenCV的内置模块是非常强大并且是各方各面的,提供了很多公认的解决方案来处理计算机视觉方面的难题。你可以用来裁剪图片,通过修改亮度、锐度和对比度来增强图像,检测图形,分割图像直观明显区域,视频运动对象检测,实物识别,通过摄像反馈来评估机器人的动作,通过立体摄像机来得到三维视图——而这些仅仅是一小部分应用方面。
当然,如果你觉得这些模块提供的算法还不够,并且想研究开发一套自己的算法的话,OpenCV依然能够帮到你很多,比如说它的架构、内存管理、GPU支持。你会发现你自己的算法和OpenCV高度优化的模块能够很好地紧密结合起来。
对于OpenCV的模块需要强调的一点是:它们都是高度优化了的。用于在各种各样的平台上,包括从MacBook到小型嵌入式fitPC上运行的精简的Linux,提供能够快速实时运行的应用程序。
表1-1中粗略地列出了OpenCV提供的一些功能模块。
表 1-1. OpenCV提供的内置模块
模块 | 功能 |
Core | 核心的数据结构、数据类型、及内存管理 |
Imgproc | 图像滤波,几何图形转换、结构及形状分析 |
Highgui | GUI,图像和视频的读取及写入 |
Video | 视频中的运动分析及对象跟踪 |
Calib3d | 摄像机校准及多视角的三维重建 |
Feature2d | 特征提取,描述和匹配 |
Objdetect | 基于级联和灰度直方图分类器的对象检测 |
ML | 用于计算机视觉应用的统计学模型及分类器算法 |
Flann | 临近估计的快速算法库——在多维度(特征)空间中快速搜寻 |
GPU | 基于GPU并行处理的指定算法的快速执行 |
Stitching | 图像拼接中的扭曲,混合及捆集调整 |
Nonfree | 特定国家的专利算法 |