1.2 图像、像素与坐标
总目录:1.1 OpenCV介绍与学习路线 | 第一章:认识图像与跑通流程 | 编号:1.2
← 上一节:1.1 OpenCV介绍与学习路线 | 下一节:1.3 读取显示与保存图像 →
1.2 图像、像素与坐标
怎么把你看到的彩色世界存在计算机里呢? 在 OpenCV 看来,它们先统统变成一格一格的数字。
一、图像就是规则排列的像素
像素(pixel) 是数字图像最小的采样单元。把画面放得足够大,就能看到像素格子:

二、分辨率与数组形状
现在你拍一张照片,如果用更多的像素来表示,就有更多细节,自然也就更清晰。 不过这也意味着存储的数组更大了,将来计算量也大些。
分辨率 640 × 480 通常按“宽 × 高”说;NumPy 数组的 shape 却按“高、宽、通道”返回:
image = cv2.imread("image.jpg")
height, width, channels = image.shape
print(width, height, channels)
日常说法:640 × 480(宽 × 高)
数组形状:(480, 640, 3)(高, 宽, 通道)
三、二值图、灰度图与彩色图
1. 二值图
二值图只分前景和背景,实际常用 uint8 保存为 0 和 255:
0 → 黑色
255 → 白色

它常来自 threshold、inRange 或 Canny,也是 查找轮廓 最常见的输入。
2. 灰度图
8 位灰度图通常有 256 个等级:0 是黑,255 是白,中间是不同亮度。

灰度图不是“只有黑和白”,这点别和二值图混了。
3. 彩色图
彩色图可以看成多张通道图叠在一起。OpenCV 默认读取的三通道图顺序是 BGR:蓝、绿、红。

blue, green, red = cv2.split(image)
四、OpenCV 的坐标方向
图像坐标从左上角开始:
(0, 0) ─────────→ x(列,向右)
│
│
↓ y(行,向下)

访问像素时却写 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。