本节书摘来自华章出版社《Arduino计算机视觉编程》一书中的第2章,第2.1节,作者[土耳其] 欧森·奥兹卡亚(zen zkaya),吉拉伊·伊利茨(Giray Yilliki),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第2章
OpenCV的基础与安装
开源计算机视觉库(OpenCV)是一个供学术研究人员、商业公司、嵌入式设备开发社区以及全世界爱好者使用的计算机视觉库。OpenCV提供了C++、C、Python和Java等语言版本的接口,并且支持Windows、Linux、Mac OS、Android和iOS平台。它在设计的时候就考虑到了计算效率和易用性,并专注于支持实时应用。算法经过了优化并且适合运行在不同的硬件平台上,即使在多核情况下也运行良好。确实,OpenCV的一个优势就是它有一个大约5万人的用户社区。它的使用范围非常广泛,从对象识别到运动检测都有覆盖,并且在机器人技术社区中非常受欢迎。让我们开始介绍OpenCV模块,进而深入了解计算机视觉。
2.1 OpenCV的基础
在本节中,我们会讨论OpenCV组件以便更好地了解它的结构,并且会介绍OpenCV的基础。这样你将会熟悉这些模块,在后面章节的Arduino/OpenCV项目中可以根据需要来添加。所以准备好学习这些模块吧!这些模块既有共享库也有静态库。OpenCV提供了很多用户易用的功能。这样我们可以专注于项目本身。在最新的稳定版本中,可使用下列模块:
opencv_core:这个简洁的模块定义了我们经常使用的基本数据结构,包括紧密多维数组Mat和其他模块使用的基本函数。
opencv_imgproc:在图像处理模块的帮助下,我们可以像专业人员一样修改原始图像,使得它们可以被计算机视觉系统进一步处理。这个模块提供了线性和非线性的图像滤波、图像几何变换、颜色空间转换、直方图等内容。
opencv_video:在视频模块的帮助下,现在可以进行实时处理了。这个模块提供了非常重要的帧间处理能力,比如运动预测、背景建模和对象追踪等算法。
opencv_calib3d:这个多视图模块可以使用多个相机产生的图像生成一个新的维度下的视图。它还控制着深度信息提取。
opencv_feature2d:这个模块使用了许多快速的实时算法来继续边角的检测。在项目中需要进行特征检测、特征描述以及描述匹配时,会凸显其重要性。
opencv_objdetect:在前面的模块提取了一些主要特征后,我们现在可以检测对象和一些预定义类的实例(比如脸、眼睛、被子、人、汽车等)。
opencv_highgui:这个模块提供了一个很棒的UI接口。我们可以使用GUI特性来更好地理解数据的捕获和处理。
opencv_videoio:这个模块提供了视频捕获和视频解码器的接口。我们将在实时数据采集的应用中用到这个模块。
opencv_gpu:不同OpenCV模块的GPU加速算法。
还有其他辅助模块,比如FLANN、Google test wrappers、Python binding,等等。
准备好在接下来的几章中去发现这几个模块吧!但首先,确保已经在你的开发平台上安装好OpenCV!下一节将指导你完成库的安装。我们开始实践吧!