一、YUV格式
1、NV12、NV21格式
YUV420:NV12
YUV420:NV21
4个Y公用一个U、V,U、V是在Y之后存储的。Y的大小一般是width*height,U、V则在Y后面存储。
二、YUV转RGB公式
不同标准下RGB和YUV之间的转换公式不同,RGB的标准主要有BT601、BT709、BT2022三个标准。具体可以根据RGB标准进行进行转换,如果不了解应该转成什么标准,可以都试一下,看看哪种方式转换出的jpg和yuv更接近就用对应的转换公式。
1、BT601标准
1.1、8bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-128 ~ 128]
yuv -> rgb
R = Y + 1.4075 * (V - 128)
G = Y - 0.3455 * (U - 128) - 0.7169 * (V - 128)
B = Y + 1.779 * (U - 128)
rgb -> yuv
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.169 * R - 0.331 * G + 0.5 * B + 128
V = 0.5 * R - 0.419 * G - 0.081 * B + 128
1.2、10bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-32768 ~ 32768]
yuv -> rgb
R = Y + 1.4075 * (V - 32768)
G = Y - 0.3455 * (U - 32768) - 0.7169 * (V - 32768)
B = Y + 1.779 * (U - 32768)
rgb -> yuv
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.169 * R - 0.331 * G + 0.5 * B + 32768
V = 0.5 * R - 0.419 * G - 0.081 * B + 32768
2、BT709标准
2.1、8bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-128 ~ 128]
yuv -> rgb
R = Y + 1.5748 * (V - 128)
G = Y - 0.1868 * (U - 128) - 0.4680 * (V - 128)
B = Y + 1.856 * (U - 128)
rgb -> yuv
Y = 0.2126 * R + 0.7154 * G + 0.072 * B
U = -0.1145 * R - 0.3855 * G + 0.5 * B + 128
V = 0.5 * R - 0.4543 * G - 0.0457 * B + 128
2.2、10bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-32768 ~ 32768]
yuv -> rgb
R = Y + 1.5748 * (V - 32768)
G = Y - 0.1868 * (U - 32768) - 0.4680 * (V - 32768)
B = Y + 1.856 * (U - 32768)
rgb -> yuv
Y = 0.2126 * R + 0.7154 * G + 0.072 * B
U = -0.1145 * R - 0.3855 * G + 0.5 * B + 32768
V = 0.5 * R - 0.4543 * G - 0.0457 * B + 32768
3、BT2020标准
3.1、8bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-128 ~ 128]
yuv -> rgb
R = Y + 1.4746 * (V - 128)
G = Y - 0.1645 * (U - 128) - 0.5713 * (V - 128)
B = Y + 1.8814 * (U - 128)
rgb -> yuv
Y = 0.2627 * R + 0.6780 * G + 0.0593 * B
U = -0.1396 * R - 0.3604 * G + 0.5 * B + 128
V = 0.5 * R - 0.4598 * G - 0.0402 * B + 128
3.2、10bit yuv
R、G、B ~ [0~255]
Y、U、V ~ [-32768 ~ 32768]
yuv -> rgb
R = Y + 1.4746 * (V - 32768)
G = Y - 0.1645