1. RGB 三通道在内存中的存储方式

计算机中存储 RGB 图像主要有两种主流的内存布局(Layout):

Note

重要!

A. Interleaved(交错存储 / Packed)

这是最常见的存储方式,也是 OpenCV (cv2) 和大部分图像解码库(如 PIL, libjpeg)默认读取图片后的内存形态。

B. Planar(平面存储)

这是深度学习框架(如 PyTorch, Caffe)在输入模型前要求的格式。


2. 为什么会有 BGR 这种反人类的顺序?

BGR(Blue-Green-Red)主要是 OpenCV 的遗留产物。为什么是 BGR?这主要归结为 “历史原因”“硬件惯性”,而不是数学上的计算优势。

核心原因:历史上的 Windows 和 硬件标准

在 OpenCV 刚开始开发的 1999/2000 年代,计算机视觉主要依附于当时的硬件和操作系统标准:

  1. Windows GDI 与 BMP 格式: 早期 Windows 的绘图 API(GDI)和 BMP 文件格式,在底层将像素存储为 Little-Endian(小端序) 的 32位整数。
  1. 相机厂商的习惯: 当时很多工业相机和摄像头硬件输出的原始流(Raw Stream)也是 BGR 顺序。
  2. Intel 的选择: OpenCV 最早是 Intel 发起的项目(用于展示 CPU 性能)。当时的 Intel 工程师为了让库能以最快速度兼容当时的 Windows 软件生态和主流摄像头,直接采用了 BGR 作为默认格式。

有计算上的好处吗?

在现代深度学习中:没有。

在特定工程场景中:有微小的“省流”优势。

总结建议

... [RGB image vs BGR Image | Computer Vision](https://www.youtube.com/watch?v=RExazRWPUx4) ...

这个视频非常直观地演示了 OpenCV 读取图片时的 BGR 顺序,以及如果不转换直接显示会发生什么(比如人脸变蓝),能很好地辅助你理解这个概念。


mark:

> [!NOTE]
> Useful information that users should know, even when skimming content.

> [!TIP]
> Helpful advice for doing things better or more easily.

> [!IMPORTANT]
> Key information users need to know to achieve their goal.

> [!WARNING]
> Urgent info that needs immediate user attention to avoid problems.

> [!CAUTION]
> Advises about risks or negative outcomes of certain actions.