热门标签 | 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 的热爱。


推荐阅读
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • Dense Matrix Inversion Results in Segmentation Fault: Causes and Solutions ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 近期在研究逆向工程,因此尝试了一些CTF题目。通过合天网络安全实验室的CTF实战演练平台(http://www.hetianlab.com/CTFrace.html),我对Linux逆向工程的掌握还不够深入,因此暂时跳过了RE300题目。首先从逆向100开始,将文件后缀名修改为.apk进行初步分析。这一过程不仅帮助我熟悉了基本的逆向技巧,还加深了对Android应用结构的理解。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • Hyperledger Fabric 1.4 节点 SDK 快速入门指南
    本文将详细介绍如何利用 Hyperledger Fabric 1.4 的 Node.js SDK 开发应用程序。通过最新版本的 Fabric Node.js SDK,开发者可以更高效地构建和部署基于区块链的应用,实现数据的安全共享和交易处理。文章将涵盖环境配置、SDK 安装、示例代码以及常见问题的解决方法,帮助读者快速上手并掌握核心功能。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
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社区 版权所有