contribute上次修改:2026-09-29

1.2 图像、像素与坐标

总目录:1.1 OpenCV介绍与学习路线 | 第一章:认识图像与跑通流程 | 编号:1.2

← 上一节:1.1 OpenCV介绍与学习路线 | 下一节:1.3 读取显示与保存图像 →


1.2 图像、像素与坐标

怎么把你看到的彩色世界存在计算机里呢? 在 OpenCV 看来,它们先统统变成一格一格的数字。

一、图像就是规则排列的像素

像素(pixel) 是数字图像最小的采样单元。把画面放得足够大,就能看到像素格子:

1.2-image-001

二、分辨率与数组形状

现在你拍一张照片,如果用更多的像素来表示,就有更多细节,自然也就更清晰。 不过这也意味着存储的数组更大了,将来计算量也大些。

分辨率 640 × 480 通常按“宽 × 高”说;NumPy 数组的 shape 却按“高、宽、通道”返回:

image = cv2.imread("image.jpg")
height, width, channels = image.shape
print(width, height, channels)
日常说法:640 × 480(宽 × 高)
数组形状:(480, 640, 3)(高, 宽, 通道)
1.2-image-002

三、二值图、灰度图与彩色图

1. 二值图

二值图只分前景和背景,实际常用 uint8 保存为 0 和 255:

0   → 黑色
255 → 白色
1.2-image-003

它常来自 threshold、inRange 或 Canny,也是 查找轮廓 最常见的输入。

2. 灰度图

8 位灰度图通常有 256 个等级:0 是黑,255 是白,中间是不同亮度。

1.2-image-005

灰度图不是“只有黑和白”,这点别和二值图混了。

3. 彩色图

彩色图可以看成多张通道图叠在一起。OpenCV 默认读取的三通道图顺序是 BGR:蓝、绿、红。

1.2-image-006
blue, green, red = cv2.split(image)

四、OpenCV 的坐标方向

图像坐标从左上角开始:

(0, 0) ─────────→ x(列,向右)
  │
  │
  ↓ y(行,向下)
1.2-image-001-2

访问像素时却写 image[y, x],因为 NumPy 索引是 [行, 列]:

bgr = image[100, 200]   # y=100, x=200

一句话记住:

说坐标时是 (x, y),切数组时是 [y, x]。

五、像素值、数据类型与溢出

普通 8 位图像的类型多为 uint8,范围是 0~255:

print(image.dtype)  # uint8

uint8 做 NumPy 原生加法时可能回绕:

value = np.uint8(250)
print(value + np.uint8(10))  # 可能回绕成 4

而 OpenCV 的 cv2.add 会做饱和运算,把超出的值压到 255。以后做亮度运算时要分清这两种规则。

本篇最小检查

import cv2

image = cv2.imread("image.jpg")
if image is None:
    raise FileNotFoundError("图像路径不对")

print("shape:", image.shape)
print("dtype:", image.dtype)
print("左上角 BGR:", image[0, 0])

← 上一节:1.1 OpenCV介绍与学习路线 | 下一节:1.3 读取显示与保存图像 →

留言区

不收集任何个人信息;昵称只绑定浏览器里的随机 Cookie。