第一章:计算机视觉中图像的基础认知
第二章:计算机视觉:卷积神经网络(CNN)基本概念(一)
第三章:计算机视觉:卷积神经网络(CNN)基本概念(二)
第四章:搭建一个经典的LeNet5神经网络
在计算机视觉中,图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。
在深度学习框架中,通常使用四维数组 [batch_size, channel, height, width]
或简称 [N, C, H, W]
来表示一批图像的数据格式。而对于视频数据,我们则需要额外增加一个时间维度,即 [batch_size, channel, height, width, time_step]
,将视频拆解为单帧图像后,复用图像处理逻辑。
RGB三通道彩色图像和单通道灰度图像是数字图像处理中的两种基本类型,它们在色彩表示、数据存储以及应用场景等方面有着显著的区别。理解这两者的差异有助于更好地进行图像处理与分析。
定义:RGB图像由红(Red)、绿(Green)、蓝(Blue)三个颜色通道组成。每个像素的颜色通过这三个通道的不同强度组合来表示。每个通道通常是一个8位的整数,取值范围为0到255。
色彩表示:
应用场景:适用于需要高保真度色彩再现的应用场景,如照片编辑、影视制作、游戏开发等。
定义:灰度图像仅包含一个通道,用来表示亮度信息。每个像素的值代表该点的亮度级别,范围通常是0(黑色)到255(白色),中间值则表示不同深浅的灰色。
色彩表示:
应用场景:常用于文本识别、边缘检测、医学影像分析等领域,在这些领域中,颜色信息并非关键因素,而对比度和亮度的变化更为重要。
信息量:
存储空间:
处理速度:
用途:
转换关系:
Gray = 0.299*R + 0.587*G + 0.114*B
。Python 生态中有三大主流图像处理库,各有适用场景:
Matplotlib 是一个强大的数据可视化工具,它模仿了 Matlab 的绘图功能。虽然它没有内置的图像处理功能(如旋转、滤波),需手动实现。但可以方便地与 科学计算库NumPy 结合使用来进行图像操作。
from matplotlib import pyplot as plt
import numpy as np
# 读取为 [H, W, C] 的 NumPy 数组(RGB)
img = plt.imread("哪吒.jpeg")
H, W, C = img.shape
print(img.shape) # 输出(2160, 3840, 3)
# 显示图像
plt.imshow(img)
# 保存图像
plt.imsave("哪吒output.jpeg", img)
# 提取红色通道并显示为灰度图
img_r = img[:, :, 0]
plt.imshow(img_r, cmap="gray")
# 下采样(每4像素取1个)
plt.imshow(img[::4, ::4, :])
# 截取左上角 1/4 图像
plt.imshow(img[:H//2, :W//2, :])
OpenCV 是计算机视觉领域的金标准库,功能全面,覆盖图像处理、视频分析、实时摄像头捕获,底层为 C++ 实现,Python 通过 cv2 模块调用,支持特征检测、目标跟踪、AR 等高级功能。
通过 pip install opencv-python
即可安装。
import cv2
# 读取图像
# 读取为 [H, W, C] 的 BGR 格式数组
img = cv2.imread(filename="哪吒.jpeg")
print(img.shape) # 注意OpenCV默认读取为BGR格式
# 显示图像
cv2.imshow(winname = "Window", mat=img)
# 等待按键
cv2.waitKey(delay=0)
# 关闭窗口
cv2.destroyAllWindows()
使用 OpenCV 库从摄像头捕获视频流并在窗口中实时显示每一帧,直到用户按下 ESC 键退出
# 视频读取示例
# 创建一个 VideoCapture 对象,参数 0 表示使用第一个可用的摄像头(笔记本内置摄像头或连接的第一个外置摄像头)。如果你有多个摄像头,可以通过改变这个数字来选择不同的设备(如第二个摄像头可以使用 1)。
cap = cv2.VideoCapture(0)
# 开始一个无限循环,用于持续读取和处理视频帧,直到满足特定条件退出循环。
while True:
# 读取帧
# cap.read(): 从摄像头读取下一帧。此方法返回两个值:
# status: 布尔值,表示是否成功读取了帧。如果为 True,则表示成功读取;如果为 False,则表示读取失败。
# frame: 当前捕获的帧,通常是一个 NumPy 数组,包含图像数据。
status, frame = cap.read()
if not status:
break
# 显示帧
# 在名为 "demo" 的窗口中显示当前帧 frame
# 每次调用此函数都会更新窗口中的图像。
cv2.imshow(winname="demo", mat=frame)
# 按 ESC 退出
# 等待按键事件。参数 delay 指定了等待的时间(以毫秒为单位)。
# 这里设置为 1000 // 24,即大约每秒24帧的速度(模拟电影的帧率),这意味着每帧之间会有短暂的延迟。
# 如果检测到按下了 ESC 键(ASCII码为27),则跳出循环并结束程序。
if cv2.waitKey(delay=1000 // 24) == 27:
break
# 释放摄像头资源,确保摄像头不再被占用,以便其他应用程序可以访问它。
cap.release()
# 关闭所有由 OpenCV 创建的窗口,释放相关资源。
cv2.destroyAllWindows()
PIL (Python Imaging Library) 轻量级图像处理, 是专门用于图像处理的 Python 库,Python 内置库,适合简单编辑与格式转换。易于使用且能无缝衔接 PyTorch。
from PIL import Image
img = Image.open("哪吒.jpeg") # 读取为 PIL.Image 对象
print(img.size, img.width) # 输出 (3840, 2160) 3840
img.resize((100, 100)) # 调整尺寸
img.rotate(-20) # 旋转
img.convert("L") # 转灰度图
np.array(img).shape
img.save(fp="哪吒2.jpeg") # 保存