CV 概览与数字图像基础:RGB/HSV 颜色空间、像素矩阵与位深度

📂 所属阶段:第一阶段 — 图像处理基石(传统 CV 篇)
🔗 相关章节:OpenCV 快速入门 · 图像增强与滤波


1. 什么是计算机视觉?

1.1 CV 的三个层次

低层视觉(Low-level):
  → 图像处理、滤波、边缘检测
  → 输入:图像,输出:图像

中层视觉(Mid-level):
  → 特征提取、目标检测、图像分割
  → 输入:图像,输出:结构化信息

高层视觉(High-level):
  → 场景理解、行为识别、3D 重建
  → 输入:图像,输出:语义理解

1.2 CV 的应用领域

人脸识别 → 安防、支付、解锁
目标检测 → 自动驾驶、监控、工业检测
医学影像 → 肿瘤检测、诊断辅助
增强现实 → 虚拟试衣、游戏、导航

2. 数字图像基础

2.1 像素与矩阵

"""
数字图像 = 像素矩阵

灰度图像:
  H × W 矩阵,每个元素是 0-255 的灰度值
  
彩色图像:
  H × W × 3 矩阵,三个通道分别代表 R、G、B
  
示例:
  图像 = [[255, 128, 0],
          [64,  192, 32],
          [16,  48,  200]]
  
  这是一个 3×3 的灰度图像
"""

import numpy as np
import cv2

# 创建一个 100×100 的黑色图像
black_img = np.zeros((100, 100), dtype=np.uint8)

# 创建一个 100×100 的彩色图像(RGB)
color_img = np.zeros((100, 100, 3), dtype=np.uint8)

print(f"灰度图像形状: {black_img.shape}")  # (100, 100)
print(f"彩色图像形状: {color_img.shape}")  # (100, 100, 3)

2.2 位深度(Bit Depth)

位深度 = 每个像素用多少比特表示

8 位:0-255(256 种灰度)→ 最常见
16 位:0-65535(65536 种灰度)→ 医学影像
32 位:浮点数 0.0-1.0 → 高精度处理

3. RGB 颜色空间

3.1 RGB 原理

"""
RGB = Red, Green, Blue

每个通道 0-255,共 256^3 ≈ 1600 万种颜色

示例:
  (255, 0, 0) = 红色
  (0, 255, 0) = 绿色
  (0, 0, 255) = 蓝色
  (255, 255, 255) = 白色
  (0, 0, 0) = 黑色
"""

import cv2
import numpy as np

# 创建一个 200×200 的红色图像
red_img = np.zeros((200, 200, 3), dtype=np.uint8)
red_img[:, :] = [0, 0, 255]  # OpenCV 使用 BGR 顺序!

# 创建一个渐变图像
gradient = np.zeros((200, 200, 3), dtype=np.uint8)
for i in range(200):
    gradient[i, :] = [i, i, i]  # 灰度渐变

cv2.imshow("Red Image", red_img)
cv2.imshow("Gradient", gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 OpenCV 中的 BGR 顺序

"""
注意:OpenCV 使用 BGR 顺序,不是 RGB!

这是 OpenCV 的历史遗留问题
"""

import cv2

# 读取图像(OpenCV 默认 BGR)
img = cv2.imread("photo.jpg")

# 转换为 RGB(用于显示或其他库)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 转换为灰度
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

4. HSV 颜色空间

4.1 HSV vs RGB

RGB:计算机友好,但不符合人类直觉
HSV:人类友好,更容易进行颜色分割

H(色调):0-180,代表颜色(红、绿、蓝等)
S(饱和度):0-255,颜色的纯度
V(亮度):0-255,颜色的明暗

4.2 HSV 应用:颜色分割

import cv2
import numpy as np

# 读取图像
img = cv2.imread("photo.jpg")

# 转换为 HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 定义红色范围(HSV)
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])

# 创建掩码
mask = cv2.inRange(hsv, lower_red, upper_red)

# 提取红色区域
result = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow("Red Objects", result)
cv2.waitKey(0)

5. 小结

数字图像三要素:

1. 像素矩阵:H × W(灰度)或 H × W × 3(彩色)
2. 位深度:通常 8 位(0-255)
3. 颜色空间:RGB(计算机)或 HSV(人类直觉)

2026 年实践:
- 大多数场景用 RGB/BGR
- 颜色分割用 HSV
- 医学影像用 16 位灰度

💡 记住:理解像素矩阵是 CV 的基础。所有高级算法都是在操作这些矩阵。


🔗 扩展阅读