2.1 数字图像表示
数字图像本质是一个二维矩阵(或三维张量),每个元素称为像素。对于灰度图像,每个像素存储一个亮度值(通常 0~255);对于彩色图像,每个像素由多个通道组成(如 RGB 三通道)。
图像分辨率 = 宽度 × 高度(像素数)。例如 640×480 的图像共有 307,200 个像素。每个像素的位深决定了颜色精度:8位灰度可表示 256 级亮度,24位彩色可表示 16,777,216 种颜色。
2.2 像素与邻域
像素是图像的最小基本单元。相邻像素之间的关系对于图像处理至关重要。常见的邻域类型包括 4-邻域、8-邻域和对角邻域。
2.3 色彩空间
色彩空间是颜色表示的数学模型。在计算机视觉中,最常用的三种色彩空间是 RGB、HSV 和 灰度。
2.3.1 RGB 色彩空间
RGB 基于三原色(红、绿、蓝)叠加原理。每个通道取值范围 0~255。常用于显示器、摄像头原始数据。
| 颜色 | R | G | B |
|---|---|---|---|
| 红色 | 255 | 0 | 0 |
| 绿色 | 0 | 255 | 0 |
| 蓝色 | 0 | 0 | 255 |
| 白色 | 255 | 255 | 255 |
| 黑色 | 0 | 0 | 0 |
| 灰色 | 128 | 128 | 128 |
2.3.2 HSV 色彩空间
HSV 将颜色分解为色调 (Hue)、饱和度 (Saturation) 和明度 (Value)。更符合人类视觉感知,常用于亮度调整、颜色分割。
💡 为什么 HSV 对亮度调整友好? 因为亮度信息集中在 V 通道,调整 V 通道不会改变色调和饱和度,可避免颜色失真。
2.3.3 灰度图像
灰度图像每个像素只有一个亮度值,通常由 RGB 加权转换得到:Gray = 0.299·R + 0.587·G + 0.114·B。灰度图简化了计算,是亮度分析的基础。
2.4 色彩空间转换实战
使用 OpenCV 可以轻松转换色彩空间。以下代码演示了如何读取图像并转换为 HSV 和灰度。
import cv2
# 读取图像 (BGR 格式)
img = cv2.imread('scene.jpg')
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 转换为 HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 分离 HSV 通道
h, s, v = cv2.split(hsv)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Gray', gray)
cv2.imshow('Value Channel', v)
cv2.waitKey(0)
cv2.destroyAllWindows()
在亮度自适应调整中,我们通常提取 V 通道进行分析,然后对 V 通道进行增强,最后合并回 HSV 再转回 BGR 显示。