yuv转jpg(NV12,NV21)

博客介绍了YUV格式中的NV12、NV21格式,阐述不同标准(BT601、BT709、BT2020)下8bit和10bit YUV与RGB的转换公式。还给出了使用Python调用C++实现转换的代码,这种方式转化效率更高,C++端代码可进一步改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值