第一种方式:
R
G
B
→
Y
U
V
{
Y
=
0.257
R
+
0.504
G
+
0.098
B
+
16
U
=
−
0.148
R
−
0.291
G
+
0.439
B
+
128
V
=
0.439
R
−
0.368
G
−
0.071
B
+
128
\footnotesize RGB \rightarrow YUV \begin{cases} Y = \ \ \ 0.257R + 0.504G + 0.098B +16 \\ U = -0.148R - 0.291G + 0.439B + 128 \\ V = \ \ \ 0.439R - 0.368G - 0.071B + 128 \end{cases}
RGB→YUV⎩⎨⎧Y= 0.257R+0.504G+0.098B+16U=−0.148R−0.291G+0.439B+128V= 0.439R−0.368G−0.071B+128
Y
U
V
→
R
G
B
{
R
=
1.164
(
Y
−
16
)
+
1.596
(
V
−
128
)
G
=
1.164
(
Y
−
16
)
−
0.391
(
U
−
128
)
−
0.813
(
V
−
128
)
B
=
1.164
(
Y
−
16
)
+
2.018
(
U
−
128
)
\footnotesize YUV \rightarrow RGB \begin{cases} R = 1.164(Y-16) + 1.596(V-128) \\ G = 1.164(Y-16) - 0.391(U-128) - 0.813(V-128) \\ B = 1.164(Y-16) + 2.018(U-128) \end{cases}
YUV→RGB⎩⎨⎧R=1.164(Y−16)+1.596(V−128)G=1.164(Y−16)−0.391(U−128)−0.813(V−128)B=1.164(Y−16)+2.018(U−128) 其中RGB以及YUV取值范围分别为:
R
/
G
/
B
∈
[
0
,
255
]
,
Y
∈
[
16
,
235
]
,
U
/
V
∈
[
16
,
240
]
\footnotesize R/G/B∈[0,255],Y∈[16,235],U/V∈[16,240]
R/G/B∈[0,255],Y∈[16,235],U/V∈[16,240]若超出取值范围,则直接截断处理。
当前方式出自 K e i t h J a c k \footnotesize Keith Jack KeithJack的书 < < V i d e o D e m y s t i f i e d > > ( I S B N 1 − 8787 − 7 − 09 − 4 ) \footnotesize<<Video Demystified>>(ISBN 1-8787-7-09-4) <<VideoDemystified>>(ISBN1−8787−7−09−4), O p e n C V \footnotesize OpenCV OpenCV采用的 Y U V → R G B \footnotesize YUV \rightarrow RGB YUV→RGB的整型系数转换公式正是基于当前方式。
将公式中的
Y
U
V
\footnotesize YUV
YUV和
R
G
B
\footnotesize RGB
RGB的取值范围以线性方式统一到
[
0
,
255
]
:
\footnotesize \color{red} \textbf [0,255 \textbf]:
[0,255]:
R
G
B
→
Y
U
V
{
Y
=
(
0.257
R
+
0.504
G
+
0.098
B
+
16
−
16
)
∗
255
235
−
16
=
0.2992
R
+
0.5868
G
+
0.1141
B
U
=
(
−
0.148
R
−
0.291
G
+
0.439
B
+
128
−
16
)
∗
255
240
−
16
=
−
0.1685
R
−
0.3313
G
+
0.4998
B
+
127.5
V
=
(
0.439
R
−
0.368
G
−
0.071
B
+
128
−
16
)
∗
255
240
−
16
=
0.4998
R
−
0.4189
G
−
0.0808
B
+
127.5
\footnotesize RGB\rightarrow YUV\begin{cases} {\color{red}Y}=\left(\ \ \ 0.257R\ \ +0.504G\ \ +0.098B\ \ +16 \ -16\right)*\frac {255} {235-16} \\ \quad = \color{red}\quad 0.2992R + 0.5868G + 0.1141B \\ {\color{red}U}=\left(-0.148R\ \ -0.291G\ \ +0.439B\ \ +128-16\right)*\frac {255}{240-16} \\ \quad =\color{red}\ \ -0.1685R-0.3313G+0.4998B+127.5 \\ {\color{red}V} = \left(\ \ \ 0.439R\ \ -0.368G\ \ -0.071B\ \ +128-16\right)* \frac {255} {240-16} \\ \quad = \color{red}\quad0.4998R-0.4189G-0.0808B+127.5 \end{cases}
RGB→YUV⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧Y=( 0.257R +0.504G +0.098B +16 −16)∗235−16255=0.2992R+0.5868G+0.1141BU=(−0.148R −0.291G +0.439B +128−16)∗240−16255= −0.1685R−0.3313G+0.4998B+127.5V=( 0.439R −0.368G −0.071B +128−16)∗240−16255=0.4998R−0.4189G−0.0808B+127.5
Y
U
V
→
R
G
B
{
R
=
1.164
(
235
−
16
255
Y
+
16
−
16
)
+
1.596
(
240
−
16
255
V
+
16
−
128
)
=
0.9997
Y
+
1.402
V
−
178.520
=
0.9997
Y
+
1402
(
V
−
127.4979
)
G
=
1.164
(
235
−
16
255
Y
+
16
−
16
)
−
0.391
(
240
−
16
255
U
+
16
−
128
)
−
0.813
(
240
−
16
255
V
+
16
−
128
)
=
0.9997
Y
−
0.3435
U
+
43.792
−
0.7142
V
+
91.056
=
0.9997
Y
−
0.3435
(
U
−
127.4846
)
−
0.7142
(
V
−
127.4937
)
B
=
1.164
(
235
−
16
255
Y
+
16
−
16
)
+
2.018
∗
(
240
−
16
255
+
16
−
128
)
=
0.9997
Y
+
1.7727
U
−
226.016
=
0.9997
Y
+
1.7727
(
U
−
127.4982
)
\footnotesize YUV\rightarrow RGB\begin{cases} {\color{red}R}=1.164\left(\frac{235-16}{255}Y+16-16\right)+1.596\left(\frac{240-16}{255}V+16-128\right) \\ \quad = 0.9997Y+1.402V-178.520=\color{red}0.9997Y+1 402(V-127.4979)\\ {\color{red}G}=1.164\left(\frac{235-16}{255}Y+16-16\right)-0.391\left(\frac{240-16}{255}U+16-128\right)-0.813\left(\frac{240-16}{255}V+16-128\right) \\ \quad =0.9997Y-0.3435U+43.792-0.7142V+91.056 \\ \quad =\color{red}0.9997Y-0.3435(U-127.4846)-0.7142(V-127.4937) \\ {\color{red}B} = 1.164\left(\frac{235-16}{255}Y+16-16\right)+2.018*\left(\frac{240-16}{255}+16-128 \right)\\ \quad = 0.9997Y+1.7727U-226.016 = \color{red}0.9997Y+1.7727(U-127.4982) \end{cases}
YUV→RGB⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧R=1.164(255235−16Y+16−16)+1.596(255240−16V+16−128)=0.9997Y+1.402V−178.520=0.9997Y+1402(V−127.4979)G=1.164(255235−16Y+16−16)−0.391(255240−16U+16−128)−0.813(255240−16V+16−128)=0.9997Y−0.3435U+43.792−0.7142V+91.056=0.9997Y−0.3435(U−127.4846)−0.7142(V−127.4937)B=1.164(255235−16Y+16−16)+2.018∗(255240−16+16−128)=0.9997Y+1.7727U−226.016=0.9997Y+1.7727(U−127.4982)
第二种方式:
R
G
B
→
Y
U
V
{
Y
=
0.299
R
+
0.587
G
+
0.114
B
U
=
−
0.169
R
−
0.331
G
+
0.500
B
=
0.564
(
B
−
Y
)
V
=
0.500
R
−
0.419
G
−
0.081
B
=
0.713
(
R
−
Y
)
\footnotesize RGB \rightarrow YUV \begin{cases} Y = \ \ \ 0.299R + 0.587G + 0.114B\\ U = -0.169R - 0.331G + 0.500B=0.564(B-Y) \\ V = \ \ \ 0.500R - 0.419G - 0.081B=0.713(R-Y) \end{cases}
RGB→YUV⎩⎨⎧Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.500B=0.564(B−Y)V= 0.500R−0.419G−0.081B=0.713(R−Y)
Y
U
V
→
R
G
B
{
R
=
Y
+
1.403
V
G
=
Y
−
0.344
U
−
0.714
V
B
=
Y
+
1.770
U
\footnotesize YUV \rightarrow RGB \begin{cases} R = Y + 1.403V\\ G = Y - 0.344U - 0.714V\\ B = Y + 1.770U \end{cases}
YUV→RGB⎩⎨⎧R=Y+1.403VG=Y−0.344U−0.714VB=Y+1.770U 其中RGB以及YUV取值范围分别为:
R
/
G
/
B
∈
[
0
,
1
]
,
Y
∈
[
0
,
1
]
,
U
/
V
∈
[
−
0.5
,
0.5
]
\footnotesize R/G/B∈[0,1],Y∈[0,1],U/V∈[-0.5,0.5]
R/G/B∈[0,1],Y∈[0,1],U/V∈[−0.5,0.5] 当前方式出自
C
C
I
R
601
\footnotesize CCIR 601
CCIR601。
将公式中的
Y
U
V
\footnotesize YUV
YUV和
R
G
B
\footnotesize RGB
RGB的取值范围以线性方式统一到
[
0
,
255
]
:
\footnotesize \color{red} \textbf [0,255 \textbf]:
[0,255]:
R
G
B
→
Y
U
V
{
Y
=
255
(
0.299
R
255
+
0.587
G
255
+
0.114
B
255
)
=
0.299
R
+
0.587
G
+
0.114
B
U
=
255
(
−
0.169
R
255
−
0.331
G
255
+
0.5008
B
255
)
+
255
∗
0.5
=
−
0.169
R
−
0.331
G
+
0.5008
B
+
128
V
=
255
(
0.500
R
255
−
0.419
G
255
−
0.081
B
255
)
+
255
∗
0.5
=
0.500
R
−
0.419
G
−
0.081
B
+
128
\footnotesize RGB\rightarrow YUV\begin{cases} {\color{red}Y}=255(0.299\frac {R}{255}+0.587\frac{G}{255} +0.114\frac{B}{255})\\ \quad = \color{red}\ \ \ 0.299R+0.587G+0.114B \\ {\color{red}U}=255(-0.169\frac {R}{255} - 0.331\frac {G}{255} + 0.5008\frac{B}{255}) + 255*0.5 \\ \quad =\color{red}-0.169R-0.331G+0.5008B+128 \\ {\color{red}V} = 255(0.500\frac {R}{255} - 0.419\frac {G}{255} - 0.081\frac{B}{255}) + 255*0.5\\ \quad = \color{red}\ \ \ 0.500R-0.419G-0.081B+128 \end{cases}
RGB→YUV⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧Y=255(0.299255R+0.587255G+0.114255B)= 0.299R+0.587G+0.114BU=255(−0.169255R−0.331255G+0.5008255B)+255∗0.5=−0.169R−0.331G+0.5008B+128V=255(0.500255R−0.419255G−0.081255B)+255∗0.5= 0.500R−0.419G−0.081B+128
Y
U
V
→
R
G
B
{
R
=
255
(
Y
255
+
1.403
(
V
255
−
0.5
)
)
=
Y
+
1403
(
V
−
128
)
G
=
255
(
Y
255
−
0.344
(
U
255
−
0.5
)
−
0.714
(
V
255
−
0.5
)
)
=
Y
−
0.344
(
U
−
128
)
−
0.714
(
V
−
128
)
B
=
255
(
Y
255
+
1.770
(
U
255
−
0.5
)
)
=
Y
+
1.770
(
U
−
128
)
\footnotesize YUV\rightarrow RGB\begin{cases} {\color{red}R}=255\left(\frac{Y}{255}+1.403\left(\frac{V}{255}-0.5\right)\right)\\ \quad =\color{red}Y+1403(V-128)\\ {\color{red}G}=255\left(\frac{Y}{255} - 0.344\left(\frac{U}{255}-0.5\right)-0.714\left(\frac{V}{255}-0.5\right)\right) \\ \quad =\color{red}Y-0.344(U-128)-0.714(V-128) \\ {\color{red}B} = 255\left(\frac{Y}{255}+1.770\left(\frac{U}{255}-0.5\right)\right)\\ \quad = \color{red}Y+1.770(U-128) \end{cases}
YUV→RGB⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧R=255(255Y+1.403(255V−0.5))=Y+1403(V−128)G=255(255Y−0.344(255U−0.5)−0.714(255V−0.5))=Y−0.344(U−128)−0.714(V−128)B=255(255Y+1.770(255U−0.5))=Y+1.770(U−128)
常用方式:
将
R
G
B
\footnotesize RGB
RGB以及
Y
U
V
\footnotesize YUV
YUV的取值范围都缩放到
[
0
,
255
]
\footnotesize \textbf [0,255 \textbf]
[0,255]之后的常用公式为:
R
G
B
→
Y
U
V
{
Y
=
0.299
R
+
0.587
G
+
0.114
B
U
=
−
0.169
R
−
0.331
G
+
0.5008
B
+
128
V
=
0.500
R
−
0.419
G
−
0.081
B
+
128
\footnotesize RGB\rightarrow YUV\begin{cases} Y= \ \ \ 0.299R+0.587G+0.114B \\ U=-0.169R-0.331G+0.5008B+128 \\ V= \ \ \ 0.500R-0.419G-0.081B+128 \end{cases}
RGB→YUV⎩⎨⎧Y= 0.299R+0.587G+0.114BU=−0.169R−0.331G+0.5008B+128V= 0.500R−0.419G−0.081B+128
Y
U
V
→
R
G
B
{
R
=
Y
+
1.403
(
V
−
128
)
G
=
Y
−
0.343
(
U
−
128
)
−
0.714
(
V
−
128
)
B
=
Y
+
1.770
(
U
−
128
)
\footnotesize YUV\rightarrow RGB\begin{cases} R=Y+1.403(V-128)\\ G=Y-0.343(U-128)-0.714(V-128) \\ B= Y+1.770(U-128) \end{cases}
YUV→RGB⎩⎨⎧R=Y+1.403(V−128)G=Y−0.343(U−128)−0.714(V−128)B=Y+1.770(U−128)