初识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 的出现极大地优化了计算机视觉算法验证的流程,因此受到了众多研究者的青睐。
经过二十多年的发展,OpenCV 已成为计算机视觉领域最重要的工具之一。
参考资料
视频教学:https://www.bilibili.com/video/BV1jk4y1i7gN
图书教学:https://www.epubit.com/bookDetails?id=UB7209964621702
参考代码:https://github.com/tungchiahui/OpenCV_Projects