文章目录
- 1.从一个真实的"坑"说起
- 2.先搞懂基础:什么是YUV?
-
- [2.1 YUV的三兄弟:Y、U、V](#2.1 YUV的三兄弟:Y、U、V)
- [2.2 为什么要用YUV而不是RGB?](#2.2 为什么要用YUV而不是RGB?)
- 3.4:2:2采样------YUYV422和Planar的共同基础
-
- [3.1 什么是色度降采样?](#3.1 什么是色度降采样?)
-
- [3.1.1 YUV 4:4:4格式](#3.1.1 YUV 4:4:4格式)
- [3.1.2 YUV 4:2:2格式](#3.1.2 YUV 4:2:2格式)
- [3.1.3 YUV 4:2:0格式](#3.1.3 YUV 4:2:0格式)
- [3.2 YUV422的数据量计算](#3.2 YUV422的数据量计算)
- [4.核心区别:Packed vs Planar------两种存储哲学](#4.核心区别:Packed vs Planar——两种存储哲学)
-
- [4.1 YUYV422------Packed格式的代表](#4.1 YUYV422——Packed格式的代表)
- [4.2 YUV422P------Planar格式的代表](#4.2 YUV422P——Planar格式的代表)
- 5.逐项对比:到底差在哪?
- 6.深入原理:为什么会有两种存储方式?
-
- [6.1 Packed的逻辑------"用的时候就在手边"](#6.1 Packed的逻辑——"用的时候就在手边")
- [6.2 Planar的逻辑------"各干各的,互不干扰"](#6.2 Planar的逻辑——"各干各的,互不干扰")
- 7.实际应用:工业相机中的格式选择
-
- [7.1 工业相机的典型数据链路](#7.1 工业相机的典型数据链路)
- [7.2 YUYV422的典型应用场景](#7.2 YUYV422的典型应用场景)
- [7.3 Planar格式的典型应用场景](#7.3 Planar格式的典型应用场景)
- 8.实战要点:格式转换与注意事项
-
- [8.1 常见的格式转换路径](#8.1 常见的格式转换路径)
- [8.2 YUV与RGB的转换公式](#8.2 YUV与RGB的转换公式)
- [8.3 性能优化建议](#8.3 性能优化建议)
- [8.4 常见误区与避坑指南](#8.4 常见误区与避坑指南)
- [8.5 总结:选格式,先问自己三个问题](#8.5 总结:选格式,先问自己三个问题)
在工业视觉的世界里,图像不是给人看的,是给算法"吃"的。选对格式,事半功倍;选错格式,调参调到怀疑人生。
1.从一个真实的"坑"说起
产线跑得好好的,屏幕上的图像看着也没问题,可缺陷检测的漏检率就是居高不下。工程师调了半天算法参数,边缘检测依然飘忽不定。
老板在旁边问了一句:"相机不是已经拍到了吗,怎么还识别不准?"
现场安静了三秒。

很多视觉项目,最后拆解下来才发现:根因可能从Sensor输出数据的那一刻,就已经埋下了。 而这个"根因",往往就藏在图像格式的选择里。
今天这篇文章,我们就来深入聊聊工业相机中最常见的两种YUV存储格式YUYV422(Packed格式) 和 YUV422P(Planar格式),搞清楚它们的原理、区别、适用场景,以及到底该怎么选。
2.先搞懂基础:什么是YUV?
在讲YUYV422和Planar之前,我们得先理解一个前提------YUV色彩空间。
2.1 YUV的三兄弟:Y、U、V
YUV将一幅彩色图像拆成了三个分量:
- Y(亮度/Luma):表示图像的明暗程度,本质上就是灰度值。如果只看Y分量,你看到的就是一张黑白照片。
- U(Cb,蓝色色度):蓝色分量去掉亮度后的残差信息,用于描述图像的色彩信息和饱和度。
- V(Cr,红色色度):红色分量去掉亮度后的残差信息,同样用于描述图像的色彩信息和饱和度。
这种"亮度+色度"分离的设计,源于一个关键洞察:人眼对亮度的敏感度远高于对色度的敏感度。 既然色度信息没那么重要,那就可以适当"偷懒"------对色度进行降采样,从而大幅节省数据量,同时人眼几乎察觉不到画质损失。

2.2 为什么要用YUV而不是RGB?
RGB格式(红-绿-蓝)是大家最熟悉的颜色表示方式,三个通道地位平等,每个像素需要3个字节(RGB24)来表示。但RGB有个问题:三个通道之间高度相关,数据冗余大,传输和存储成本高。

在工业相机中,Sensor采集到的原始数据(Bayer格式)经过ISP处理后,常见的输出格式就是YUV或RGB。其中YUV因为带宽优势,成为了很多工业相机的首选输出格式。
3.4:2:2采样------YUYV422和Planar的共同基础
3.1 什么是色度降采样?
前面提到,人眼对色度不敏感,所以可以对色度信息进行降采样。主流的采样方式有三种:
| 采样方式 | 含义 | 每像素平均数据量 |
|---|---|---|
| 4:4:4 | 每个Y对应一组完整的UV | 3字节(24bit) |
| 4:2:2 | 每2个水平相邻的Y共用一组UV | 2字节(16bit) |
| 4:2:0 | 每4个Y(2×2方块)共用一组UV | 1.5字节(12bit) |
下图以黑点代表采样像素点的Y分量,以圆圈代表采样像素点的UV分量:

- YUV444:完全采样,即每一个Y信号对应的UV信号都采样,没有损失任何信号;
- YUV422:两个Y信号公用一个UV分量,及4个有分量对应2个U和2个V分量,色度信号损失一部分从而减小数据量;
- YUV420:四个Y分量公用一个UV分量,在422的基础上进一步降低数据量。
3.1.1 YUV 4:4:4格式
YUV 4:4:4采样,每一个Y对应一组UV分量
3.1.2 YUV 4:2:2格式
YUV 4:2:2采样,每两个Y共用一组UV分量。

3.1.3 YUV 4:2:0格式
YUV 4:2:0采样,每四个Y共用一组UV分量。

3.2 YUV422的数据量计算
以一幅W×H 像素的图像为例,YUV422采样下:
- Y分量:W × H个
- U分量:W/2 × H个(水平方向减半,垂直方向不变)
- V分量:W/2 × H个
总数据量 = W×H + W/2×H + W/2×H = W×H×2 字节

也就是说,无论采用哪种存储方式,YUV422每像素固定占用2字节(16bit),相比RGB24的3字节节省了约33%的带宽,同时在水平方向保留了完整的色度分辨率------这对于需要水平色彩细节的工业检测场景非常友好。
4.核心区别:Packed vs Planar------两种存储哲学
YUV数据的存储格式在宏观上分为两大阵营:
- Packed(打包/紧缩/交错)格式:Y、U、V三个分量穿插排列在同一个连续数组里。
- Planar(平面)格式:Y、U、V三个分量分别存放在三个独立的内存平面中。

关键结论:YUYV422和Planar的区别,不在于采样方式,而在于这些字节在内存中怎么排列。
下面分别详解:
4.1 YUYV422------Packed格式的代表
YUYV422(也叫YUY2)是YUV422 Packed格式中最常见的变体。它的分量排列顺序为 Y-U-Y-V,以一个4×2像素的小图为例,内存中的字节排列如下:
bash
行0: Y00 U00 Y01 V00 | Y02 U01 Y03 V01
行1: Y10 U10 Y11 V10 | Y12 U11 Y13 V11
读取规则:相邻两个Y共用同一组UV。
可以看到,每4个字节(Y-U-Y-V)组成一个"宏像素"(macro-pixel),包含了2个完整像素的全部信息。
同一采样方式下,按UV排列顺序不同,还有其他变体:
- UYVY:U-Y-V-Y
- YVYU:Y-V-Y-U
- VYUY:V-Y-U-Y
它们只是字节序不同,本质都是Packed的YUV422。
4.2 YUV422P------Planar格式的代表
YUV422P(也叫I422)把三个分量分平面存放。同样以4×2像素的图为例:
bash
Y平面(共8字节):
Y00 Y01 Y02 Y03
Y10 Y11 Y12 Y13
U平面(共4字节):
U00 U01
U10 U11
V平面(共4字节):
V00 V01
V10 V11
存储顺序:先把全部Y(W×H个)连续存完,接着存全部U(W/2×H个),最后存全部V(W/2×H个)。
如果V排在U之前,则称为 YV16(YVU422 Planar),逻辑完全一致,只是U和V的位置互换。
5.逐项对比:到底差在哪?
采样方式相同,所以差异全部集中在存储结构和工程行为上:

一句话总结 :YUYV422重"逐像素就近取色",适合直出和渲染;
Planar重"分量独立处理",适合编码和亮度通道单独运算。
6.深入原理:为什么会有两种存储方式?
6.1 Packed的逻辑------"用的时候就在手边"
Packed格式的设计哲学是:当你需要某个像素的完整YUV信息时,所有数据都集中在一起,一次内存访问就能拿到。
这在以下场景中特别高效:


- 逐像素渲染:显示器需要同时拿到YUV三个值才能转换成RGB显示。
- GPU纹理采样:硬件以宏像素为单位访问,Packed格式天然适配。
- 实时预览:工业相机的实时画面显示,Packed格式无需额外转换即可送显。
6.2 Planar的逻辑------"各干各的,互不干扰"
Planar格式的设计哲学是:很多时候你并不需要同时访问YUV三个分量,把它们分开存放,各自连续,反而更高效。
这在以下场景中特别高效:

- 亮度通道独立运算:角点检测、边缘检测、结构光解码、立体匹配等算法,往往只需要灰度(Y)信息。Planar格式下Y是一块连续内存,可直接当Mono8图像使用,零拷贝。
- 视频编码:H.264、H.265、VP9等编码器的内部处理都是基于平面格式的,Planar输入无需重排。
- SIMD批量处理:现代CPU擅长对连续内存做批量运算,Planar的分量连续存储正好适配。
7.实际应用:工业相机中的格式选择
7.1 工业相机的典型数据链路
bash
Sensor采集 → ISP处理 → 格式输出(YUV/RGB/RAW)→ 传输 → 主机端处理 → 决策/显示
在这条链路中,格式选择的考量点主要包括:

1.ISP处理
相机内部的ISP完成去马赛克、白平衡、伽马校正后,输出格式可以是YUV或RGB。YUV422 Packed(YUYV)因为格式紧凑,是很多工业相机ISP的默认输出。
2.主机端处理
相机输出的数据到达主机后,可能需要做多种处理:
- 如果只是显示预览:YUYV422直接送显即可。
- 如果要做图像分析:通常需要转换成BGR/RGB或Planar格式。
- 如果要送视频编码器:转换成Planar(如I420/NV12)更高效。
7.2 YUYV422的典型应用场景

-
实时视频传输与显示
工业相机通过GigE/USB3传输视频流,YUYV422带宽友好,格式紧凑,适合低延迟传输。
-
视觉引导机器人
对画质要求不极致,但实时性要求高。YUYV422的紧凑格式有利于快速传输和渲染。
-
简单检测任务
存在/缺失判断、二维码/条码扫描、简单定位等,YUYV422的精度足够。
-
嵌入式设备显示
很多嵌入式显示控制器原生支持YUV输入,YUYV422可直接送显,无需格式转换。
7.3 Planar格式的典型应用场景

-
视频编码与压缩
H.264、H.265等编码器的输入通常是Planar格式(I420、NV12等)。从YUYV422转Planar再编码,是标准的视频处理管线。
-
亮度通道独立分析
机器视觉中的边缘检测、特征提取、模板匹配等算法,往往只需要灰度信息。Planar格式的Y平面可直接作为灰度图像使用,无需解包。
-
GPU/CUDA批量处理
GPU的并行计算对连续内存访问更友好。Planar格式的分量连续存储,适合用CUDA kernel做批量像素级运算。
-
图像后处理管线
在多级处理管线中(去噪→增强→分割→识别),每一步可能只需要部分分量信息。Planar格式避免了反复解包打包的开销。
8.实战要点:格式转换与注意事项
8.1 常见的格式转换路径
在实际工程中,格式转换几乎是不可避免的。常见的转换路径有:
bash
YUYV422 → BGR/RGB:用于OpenCV等库的图像处理
YUYV422 → I420/NV12:用于视频编码
Bayer RAW → YUYV422:相机内部ISP处理
YUYV422 → YUV422P:分量分离,便于单独处理
8.2 YUV与RGB的转换公式
无论Packed还是Planar,YUV到RGB的转换公式是相同的(U/V范围0,255,偏移128):
bash
R = Y + 1.403 × (V - 128)
G = Y - 0.344 × (U - 128) - 0.714 × (V - 128)
B = Y + 1.770 × (U - 128)
存储格式不影响颜色映射本身,只影响取数时的偏移计算。 从Packed格式取一个像素的YUV,需要按宏像素规则提取;从Planar格式取,则需要分别计算三个平面的偏移。
8.3 性能优化建议

8.4 常见误区与避坑指南

8.5 总结:选格式,先问自己三个问题
回到文章开头的问题:图像看着没问题,检测就是不稳定------很可能从格式选择那一刻就埋下了隐患。
在选择图像格式时,建议先问自己三个问题:

YUYV422和Planar,不是谁比谁更好的关系,而是"术业有专攻"的关系。 理解它们的原理和特点,在正确的场景使用正确的格式,才是工业视觉工程师的正确姿势。