热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

近年来,人工智能是伴随着科技发展出现的一个重要词汇,全球多个国家提出了发展人工智能的规划方案。我国也在大力发展人工智能,众多高校也纷纷成立了关于人工智能的学院与专业。而在人工智能领

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

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

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

从零起步


为什么会有这本书

近年来,关于计算机视觉的研究如火如荼,它极大地方便了人们的生活,并且吸引了越来越多 的学生、老师以及研究人员的关注。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 的热爱。


推荐阅读
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • Java数组面试常见问题及解析
    在Java编程面试中,数组作为基础且重要的知识点,经常成为考察的重点。本文将探讨数组的基础知识和相关面试题,帮助考生更好地准备面试。 ... [详细]
  • 【Java数据结构和算法】008栈
    目录0、警醒自己一、栈的应用场景和介绍1、栈的应用场景一个实际的场景:我的思考:2、栈的介绍入栈演示图:出栈演示图 ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • 本文主要解决了在编译CM10.2时出现的关于Samsung Exynos 4 HDMI HAL库中SecHdmiV4L2Utils.cpp文件的编译错误。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 深入解析链表成环问题:剑指Offer第22天的新视角
    本文将详细介绍链表成环问题的多种解法,包括哈希表法、JSON.stringify特殊解法及双指针法,并提供详尽的代码示例。阅读本文,你不仅能够掌握这一经典算法问题的核心技巧,还能了解到更多编程思维的拓展。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • Mac环境下Java与Ant自动化构建环境搭建指南
    本文详细介绍了如何在Mac操作系统上为测试工程师搭建Java和Ant开发环境,包括环境变量配置等关键步骤。 ... [详细]
  • Python编程基础:掌握控制语句
    本文深入探讨Python中的控制语句,包括if语句、if...else语句、if...elif...else语句、break与continue关键字以及while循环的使用方法。 ... [详细]
  • 深入理解Git与GitHub:分支管理与冲突解决
    本文详细探讨了Git中的分支管理技术,包括如何创建、切换和合并分支,以及如何有效解决分支合并时可能遇到的冲突。同时,文章还介绍了Git的基本原理,如哈希算法的应用和文件管理机制。 ... [详细]
  • 高通近期发布了符合最新标准的LTEM和NBIoT技术方案,然而,由于多种因素影响,物联网市场对此反应并不热烈。 ... [详细]
  • 多用户密码验证与加密登录系统
    本文介绍了一种基于多用户密码文件的加密登录方法,通过读取用户密码文件并使用简单的加密算法实现安全登录。文中详细描述了程序的设计思路及其实现过程。 ... [详细]
author-avatar
淘宝秀2010_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有