|
|
||
|---|---|---|
| .. | ||
| lab | ||
| README.md | ||
README.md
计算机视觉简介
计算机视觉 是一门旨在使计算机能够高水平理解数字图像的学科。这是一个相当广泛的定义,因为“理解”可以有许多不同的含义,包括在图片中找到物体(物体检测)、理解发生了什么(事件检测)、用文本描述一幅图像,或重建3D场景。还有一些与人类图像相关的特殊任务:年龄和情感估计、面部检测和识别,以及3D姿态估计等。
课前测验
计算机视觉最简单的任务之一是 图像分类。
计算机视觉通常被视为人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络解决的。在本节中,我们将深入了解用于计算机视觉的特殊类型神经网络——卷积神经网络。
然而,在将图像传递给神经网络之前,在许多情况下,使用一些算法技术来增强图像是有意义的。
有几种可用于图像处理的Python库:
- imageio 可用于读取/写入不同的图像格式。它还支持ffmpeg,这是一个将视频帧转换为图像的有用工具。
- Pillow(也称为PIL)功能更强大,还支持一些图像处理,例如形态变化、调色板调整等。
- OpenCV 是一个用C++编写的强大图像处理库,已成为图像处理的事实标准。它有一个方便的Python接口。
- dlib 是一个C++库,实现了许多机器学习算法,包括一些计算机视觉算法。它也有Python接口,可以用于面部和面部特征点检测等挑战性任务。
OpenCV
OpenCV 被认为是图像处理的事实标准。它包含许多有用的算法,都是用C++实现的。您也可以通过Python调用OpenCV。
学习OpenCV的好地方是这个学习OpenCV的课程。在我们的课程中,我们的目标不是学习OpenCV,而是向您展示一些可以使用它的示例,以及如何使用。
加载图像
在Python中,图像可以方便地表示为NumPy数组。例如,320x200像素的灰度图像将存储在一个200x320的数组中,而同一尺寸的彩色图像的形状将为200x320x3(代表3个颜色通道)。要加载图像,可以使用以下代码:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
传统上,OpenCV使用BGR(蓝-绿-红)编码彩色图像,而Python的其他工具使用更传统的RGB(红-绿-蓝)。为了使图像看起来正确,您需要将其转换为RGB颜色空间,可以通过交换NumPy数组中的维度或调用OpenCV函数来实现:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
相同的 cvtColor function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space.
You can also use OpenCV to load video frame-by-frame - an example is given in the exercise OpenCV Notebook.
Image Processing
Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including:
- Resizing the image using
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Blurring the image using
im = cv2.medianBlur(im,3)orim = cv2.GaussianBlur(im, (3,3), 0) - Changing the brightness and contrast of the image can be done by NumPy array manipulations, as described in this Stackoverflow note.
- Using thresholding by calling
cv2.threshold/cv2.adaptiveThreshold函数,通常比调整亮度或对比度更可取。 - 对图像应用不同的 变换:
- 通过使用 光流 理解图像内部的运动。
计算机视觉使用示例
在我们的 OpenCV笔记本 中,我们提供了一些计算机视觉可以用于执行特定任务的示例:
- 对盲文书籍的照片进行预处理。我们重点介绍如何使用阈值处理、特征检测、透视变换和NumPy操作来分离单个盲文符号,以便通过神经网络进行进一步分类。
![]() |
![]() |
![]() |
|---|
图片来自 OpenCV.ipynb
- 使用帧差检测视频中的运动。如果相机固定,则来自相机的帧应该彼此非常相似。由于帧被表示为数组,因此通过减去两个后续帧的数组,我们将得到像素差异,对于静态帧来说,这个差异应该很低,而一旦图像中出现实质性运动,差异就会增大。
图片来自 OpenCV.ipynb
-
使用光流检测运动。 光流 使我们能够理解视频帧上单个像素的运动。光流有两种类型:
- 稠密光流 计算向量场,显示每个像素的运动方向
- 稀疏光流 基于提取图像中的一些独特特征(例如边缘),并从帧到帧构建其轨迹。
图片来自 OpenCV.ipynb
✍️ 示例笔记本:OpenCV 在行动中尝试OpenCV
让我们通过探索 OpenCV笔记本 来进行一些OpenCV实验。
结论
有时,相对复杂的任务,如运动检测或指尖检测,可以仅通过计算机视觉来解决。因此,了解计算机视觉的基本技术以及像OpenCV这样的库能做什么是非常有帮助的。
🚀 挑战
观看 这个视频 来了解Cortic Tigers项目,以及他们如何通过机器人构建基于区块的解决方案,以使计算机视觉任务民主化。研究其他类似的项目,帮助新学习者进入这个领域。
课后测验
复习与自学
在这个精彩的教程中阅读更多关于光流的内容。
作业
在这个实验中,您将拍摄一个简单手势的视频,您的目标是使用光流提取上下左右的运动。
免责声明:
本文件使用基于机器的人工智能翻译服务进行翻译。虽然我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。原文以其母语应被视为权威来源。对于关键信息,建议进行专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。




