近年来,人工智能是伴随着科技发展出现的一个重要词汇,全球多个国家提出了发展人工智能 的规划方案。我国也在大力发展人工智能,众多高校也纷纷成立了关于人工智能的学院与专业。而 在人工智能领域,数字图像处理与计算机视觉占据着重要的地位,人脸识别、刷脸支付、无人驾驶 等词汇都是数字图像处理与计算机视觉领域的重要成果。图像处理和计算机视觉技术与我们日常生 活的关系越来越密切,越来越多的人已投身到相关技术的学习与研究中,而在学习与应用过程中一 定会接触到 OpenCV。本节将介绍 OpenCV 与计算机视觉的联系以及 OpenCV 自身的发展过程。

OpenCV 与计算机视觉

提及计算机视觉(computer vision),就不得不提起图像处理(image processing)。二者虽然并 没有明确的差异,但是通常将图像处理理解为计算机视觉的预处理过程,因此在介绍计算机视觉之 前,本章先介绍图像处理。图像处理一般指数字图像处理(digital image processing),即通过数学 函数和图像变换等手段对二维数字图像进行分析,获得图像数据的潜在信息,而不对图像本身进行 任何的推理。它通常包括图像压缩, 增强和复原, 匹配、描述和识别,涵盖图像去除噪声、分割、 特征提取等处理方法。

计算机视觉是一门研究如何使机器“看”的科学,即用计算机来模拟人的视觉机理,用摄像头 代替人眼对目标进行识别、跟踪和测量等,通过处理视觉信息获得更深层次的信息。例如,通过拍 摄环绕建筑物一周的视频,利用三维重建技术重建建筑物三维模型;通过放置在车辆上方的摄像头 拍摄前方场景,推断车辆能否顺利通过前方区域等决策信息。对于人类来说,通过视觉获取环境信 息是一件非常容易的事情,因此有人会误认为实现计算机视觉是一件非常容易的事情。但事实不是 这样的,因为计算机视觉是一个逆问题,通过观测到的信息恢复被观测物体或环境的信息,在这个 过程中会缺失部分信息,造成信息不足,增加问题的复杂性。例如,当通过单个摄像头拍摄场景时, 因为失去了距离信息,所以常会出现图像中“人比楼房高”的现象。因此,计算机视觉领域的研究 还有很长的路要走。

无论是图像处理还是计算机视觉,都需要在计算机中处理数据,因此研究人员不得不面对一个 非常棘手的问题——将自己的研究成果通过代码输入计算机,进行仿真验证。而在这个过程中会重复编写基本的程序,这相当于为了制造一辆汽车,需要重新发明车 轮子。为了给所有研究人员提供“车轮”,英特尔(Intel)提出了开 源计算机视觉库(Open Source Computer Vision Library ,OpenCV) 的概念,通过在计算机视觉库中包含图像处理与计算机视觉的通用 算法,避免重复无用的工作。因此,OpenCV 应运而生。OpenCV 由一系列C 语言函数和C++类构成,除支持使用C/C++语言进行开 发之外,它还支持 C# 、Ruby 等编程语言,并提供了 Python 、 MATLAB 、Java 等应用程序编程接口。它可以在 Linux 、Windows 、 macOS 、Android 和 iOS 等系统上运行。OpenCV 的出现极大地方便 了计算机视觉研究人员的算法验证,得到了众多研究者的喜爱。经 过 20 年的发展,它已经成为计算机视觉领域最重要的研究工具之 一。图 1-1 是 OpenCV 的官方标识。

计算机视觉方面快速入门的重要工具之一:OpenCV_opencv

OpenCV 4 新增了什么

自从 2015 年 6 月OpenCV 3.0.0 版本发布,时隔 3 年半 OpenCV 4.0 版本发布,这标志着OpenCV 进入 4.x 版本。OpenCV 4.0 进一步完善了核心接口, 并添加了二维码检测器、ONNX 转换格式等 新功能。OpenCV 官方给出的新版本的重要更新如下。

• OpenCV 4.0 基于 C++ 11 标准,因此要求编译器兼容 C++ 11 标准,所需的CMake 至少是3.5.1 版本。

• 移除了OpenCV 1.x 版本中C 语言方面的大量 API 。

• core 模块中的 Persistence (用于存储和加载 XML 、YAML 或 JSON 格式的结构化数据) 可 以用C++来重新实现,因此在新版本中移除了C 语言的 API 。

• 新增了基于图的高效图像处理流程模块 G-API 。

• dnn 模块包括实验使用的 Vulkan 后端,且支持 ONNX 格式的网络。

• Kinect Fusion 算法已针对 CPU 和GPU 进行了优化。

• objdetect 模块中添加了二维码检测器和解码器。

• DIS dense optical flow 算法从 opencv_contrib 模块转移到 video 模块。

在撰写本书的过程中,OpenCV 4.1.2 版本已经推出, 为了保证读者了解最新的内容,我们将 继续介绍 OpenCV 4.1 版本和OpenCV 4.1.2 版本中重要的更新。

• 缩短了 core 和 imgproc 模块中部分较大函数的执行时间。

• videoio 模块中添加了 Android Media NDK API 。

• 在 opencv_contrib/stereo 模块中实现了密集立体匹配算法。

• 将原图像质量分析模块 quality 添加到 opencv_contrib/stereo 模块中。

• 增加了手眼标定模型。

• 对 dnn 模块进行了如下改进。

▶添加了 TensorFlow 中的多个网络。

▶初步支持 3D 卷积网络。

▶推理引擎后端支持异步推理。

▶实现了网络的可视化。

• 对 calib3d 模块进行了如下改进。

▶ 添加了用于求解 PnP 问题的新 IPPE 算法。

▶ 添加了姿势优化例程。

• 更新了与匹配与追踪相关的内容。

• 重新设计了日志子系统并且提高了其稳定性。 其中OpenCV 4.1.2 版本更新的内容如下。

• Google Summer of Code (GSoC)项目集成了新的内容。

▶对 OpenCV.js 中的线程和 SIMD 进行了优化。

▶添加了基于学习的超分辨率模块。

• 对 dnn 模块进行了如下改进。

▶ 增加了具有自动预处理和后处理功能的高级 API 。

▶ OpenVINO 2019R3 增加了推理引擎后端。

• 增加了对 MIPS 平台 SIMD 的支持。

• 对库中的 API 进行了优化,优化了 dotProd 、FAST Corners 、HOG 、Pyramid-LK 、norm 、 warpPerspective 等算法。

• 提高了Aruco 项目中白色标记的检测精度,并添加了独立的模型生成器。

• 提高了二维码检测的准确性。

综合以上几个版本的重要更新内容,你可以发现 OpenCV 4 的更新方向是去除一些过时的C 语 言的 API,增加更多图像处理与计算机视觉算法模型。更重要的是,OpenCV 逐步集成了深度学习 模型,便于使用者通过深度学习解决计算机视觉问题。因此,在人工智能的潮流下,研究计算机视 觉领域的研究人员非常有必要了解并学习 OpenCV 4 的用法。

零基础学OpenCV4

OpenCV 4详解:基于Python

计算机视觉方面快速入门的重要工具之一:OpenCV_计算机视觉_02

  162个函数,286段代码清单,24种算法

  本书基于 OpenCV 4.1.2 版本,讨论 OpenCV 4 的功能,以及 OpenCV 在图像处理和计算机视觉方面的应 用。本书共 12 章,主要内容包括 OpenCV 的基础知识,数据的载入、显示与保存,图像基本操作,直方图, 图像滤波,图像形态学操作,目标检测, 图像分析与修复,特征点检测与匹配,立体视觉,视频分析,机器 学习在 OpenCV 中的实现方式。

从零起步

计算机视觉方面快速入门的重要工具之一:OpenCV_python_03

为什么会有这本书

近年来,关于计算机视觉的研究如火如荼,它极大地方便了人们的生活,并且吸引了越来越多 的学生、老师以及研究人员的关注。OpenCV 作为计算机视觉领域中一个重要的工具库, 自然也受 到了更多的关注。OpenCV 自问世以来,一直以帮助研究人员和开发者提高研究开发的效率为目标, 逐渐成为研究计算机视觉的老师和学生的重要工具,也成为初学者在计算机视觉方面快速入门的重 要工具之一。

“磨刀不误砍柴工”,OpenCV 就是学习计算机视觉的过程中经常使用的工具,熟练掌握OpenCV 的使用方法会助力计算机视觉的学习,起到事半功倍的效果。OpenCV 降低了计算机视觉的学习门 槛,但是由于缺少系统的学习资料,尤其是官网上的学习文档与对应的版本之间存在着较大的滞后 性,因此最新版的OpenCV 发布后的很长一段时间内,初学者都无法学以致用。

随着机器学习、深度学习等领域的发展,Python 语言庞大的扩展库为Python 使用者在编程过 程中提供了极大的便利,OpenCV-Python 便是其中一员。在实际使用OpenCV-Python 扩展库的过程 中, 更多的读者关心库中函数的基本原理及如何更快地上手使用。我们之前参与撰写了《OpenCV 4 快速入门》,这本书基于 C++。经常有读者在作者的公众号中询问在Python 中使用 OpenCV 时遇 到的问题,于是这本基于Python 的 OpenCV 4 图书应运而生。本书以Python 语言为基础,添加了 部分新内容,可帮助使用Python 语言的开发人员快速入门 OpenCV 。

本书内容

本书是入门级的 OpenCV 4 指南,适合具有一定计算机视觉基础和 Python 编程基础但刚接触 OpenCV 4 的读者阅读。本书从安装 OpenCV 4 的过程开始介绍,以计算机视觉知识脉络为主线, 由浅入深地介绍了OpenCV 4 在计算机视觉领域的应用以及相关函数的使用。为了让读者更好地理 解 OpenCV 4 中每个函数的原理和使用方式, 在介绍 OpenCV 4 中的函数之前, 本书首先会介绍相 关的图像处理知识。但是,我们不想将本书写得像一本图像处理算法图书,而希望把更多的精力放 在 OpenCV 4 的介绍上, 因此本书对相关知识只做了简要介绍。如果读者对算法感兴趣,那么可以 阅读相关的参考图书。

本书有 12 章,主要内容介绍如下。

第 1 章首先介绍 OpenCV 的发展过程、OpenCV 4 的新增功能, 以及 OpenCV-Python 的安装过 程、环境配置与安装过程中常见问题的解决方案, 然后讲述 OpenCV 4 的模块结构和部分源代码。

第 2 章首先介绍 NumPy 的相关基础知识与操作函数, 然后讲述 OpenCV 4 中图像文件、视频 文件、XML 文件的加载与保存。

第 3 章介绍图像颜色空间、像素基本操作、图像变换、图像金字塔以及窗口交互操作等。这些 操作是所有图像处理任务中基本的操作。

第 4 章不仅介绍图像直方图的绘制、相关操作以及直方图在实际任务中的应用,还讲述图像的 模板匹配及其应用。

第 5 章介绍图像卷积、图像噪声的生成、线性滤波、非线性滤波以及图像的边缘检测等。

第 6 章介绍对二值图像滤波的过程,主要有像素距离、连通域、腐蚀、膨胀、开运算、闭运算 等形态学应用。

第 7 章介绍如何在图像中进行形状检测、轮廓检测、矩的计算、点集拟合以及二维码的检测。 第 8 章介绍傅里叶变换、积分图像、图像分割与图像修复等。

第 9 章介绍角点的检测与绘制、多种特征点的检测与匹配。通过对本章的学习,读者将会掌握 如何利用OpenCV 4 在图像中提取任意一种特征点。

第 10 章介绍相机的成像原理,单目相机和双目相机的标定,以及图像的校正。相机模型是 计算机视觉中最重要的模型之一。该章的内容是连接图像信息与环境信息的重要纽带。

第 11 章介绍如何在视频中跟踪移动的物体,主要方法有差值法、均值迁移法以及光流法。

第 12 章首先介绍通过 OpenCV 4 如何实现传统机器学习中的 k 均值聚类算法、k 近邻算法、决 策树、支持向量机等,然后讨论在 OpenCV 4 中如何通过深度神经网络模型实现图像识别、风格迁 移等。

本书介绍了 OpenCV 4 中的大量函数并展示了大量示例程序。当然, 这并不是 OpenCV 4 的全 部内容, 只包括了 OpenCV 4 中常用的函数和功能。但是,当读者将本书介绍的内容熟练掌握后, 对未介绍的延伸内容也会很快掌握。

本书能够激发你对计算机视觉和 OpenCV 的热爱。