首页 > 其他分享 >YUV与RGB转换公式(BT601、BT709、BT2020)

YUV与RGB转换公式(BT601、BT709、BT2020)

时间:2024-03-18 17:30:58浏览次数:15  
标签:BT2020 BT709 16 0.0 YUV range 128 1.0 1.1644

1、在图像处理中经常需要对图像数据进行转换,最常见的莫过于YUV2RGB。并且这个转化在不同的标准下有不同的转化公式。

2、如果公式不匹配,则会导致转换后的图像效果有偏差。

3、full_range下Y\U\V的取值范围都为[0, 255];limit_range(也叫part_range)下Y的取值范围为[16, 235],UV的取值范围为[16, 240].

一、BT601

Full_Range:

bt601_full_range_yuv2rgb = {

        1.0, -0.0, 1.402;
        1.0, -0.3441, -0.7141;
        1.0, 1.772, -0.0;

};

R = Y + 1.402 * (V - 128);
G = Y - 0.3441 * (U - 128) - 0.7141 * (V - 128);
B = Y + 1.772 * (U - 128);

bt601_full_range_rgb2yuv = {

        0.299, 0.587, 0.114;
        -0.1687, -0.3313, 0.5;
        0.5, -0.4187, -0.0813;

};

Y = 0.299 * R + 0.587 * G + 0.114 * B;
U = -0.1687 * R - 0.3313 * G + 0.5 * B;
V = 0.5 * R - 0.4187 * G - 0.0813 * B;

Limit_Range:

bt601_limit_range_yuv2rgb = {

        1.1644, 0.0, 1.5958;
        1.1644, -0.3938, -0.8130;
        1.1644, 2.0172, -0.0;

};

R = 1.1644 * (Y - 16) + 1.5958 * (V - 128);
G = 1.1644 * (Y - 16) - 0.3938 * (U - 128) - 0.8130 * (V - 128);
B = 1.1644 * (Y - 16) + 2.0172 * (U - 128);

bt601_limit_range_rgb2yuv = {

        0.257, 0.504, 0.098;
        -0.148, -0.291, 0.439;
        0.439, -0.368, -0.0714;

};

Y = 0.257 * R + 0.504 * G + 0.098 * B;
U = -0.148 * R - 0.291 * G + 0.439 * B;
V = 0.439 * R - 0.368 * G - 0.0714 * B;

二、BT709

Full_Range:

bt709_full_range_yuv2rgb = {

        1.0, 0.0, 1.5748;
        1.0, -0.1873, -0.4681;
        1.0, 1.8556, 0.0;

};

R = Y + 1.5748* (V - 128);
G = Y - 0.1873 * (U - 128) - 0.4681 * (V - 128);
B = Y + 1.8556 * (U - 128);

bt709_full_range_rgb2yuv = {

        0.2126, 0.7152, 0.0722;
        -0.1146, -0.3854, 0.500;
        0.500, -0.4542, -0.0458;

};

Y = 0.2126 * R + 0.7152 * G + 0.0722 * B;
U = -0.1146 * R - 0.3854 * G + 0.5 * B;
V = 0.5 * R - 0.4542 * G - 0.0458 * B;

Limit_Range:

bt709_limit_range_yuv2rgb = {

        1.1644, 0.0, 1.7927;
        1.1644, -0.2132, -0.5329;
        1.1644, 2.1124, -0.0;

};

R = 1.1644 * (Y - 16) + 1.7927 * (V - 128);
G = 1.1644 * (Y - 16) - 0.2132 * (U - 128) - 0.5329 * (V - 128);
B = 1.1644 * (Y - 16) + 2.1124 * (U - 128);

bt709_limit_range_rgb2yuv = {

        0.1826, 0.6142, 0.0620;
        -0.1006, -0.3386, 0.4392;
        0.4392, -0.3989, -0.0403;

};

Y = 0.1826 * R + 0.6142 * G + 0.062 * B;
U = -0.1006 * R - 0.3386 * G + 0.4392 * B;
V = 0.4392 * R - 0.3989 * G - 0.0403 * B;

三、BT2020

Full_Range:

bt2020_full_range_yuv2rgb = {

        1.0, -0.0, 1.4746;
        1.0, -0.1646, -0.5714;
        1.0, 1.8814, -0.0;

};

R = Y + 1.4746* (V - 128);
G = Y - 0.1646 * (U - 128) - 0.5714 * (V - 128);
B = Y + 1.8814 * (U - 128);

bt2020_full_range_rgb2yuv = {

        0.2627, 0.6780, 0.0593;
        -0.1396, -0.3604, 0.500;
        0.500, -0.4598, -0.0402;

};

Y = 0.2627 * R + 0.6780 * G + 0.0593 * B;
U = -0.1396 * R - 0.3604 * G + 0.5 * B;
V = 0.5 * R - 0.4598 * G - 0.0402 * B;

Limit_Range:

bt2020_limit_range_yuv2rgb = {

        1.1644, -0.0, 1.6787;
        1.1644, -0.1873, -0.6504;
        1.1644, 2.1418, 0.0;

};

R = 1.1644 * (Y - 16) + 1.6787 * (V - 128);
G = 1.1644 * (Y - 16) - 0.1873 * (U - 128) - 0.6504 * (V - 128);
B = 1.1644 * (Y - 16) + 2.1418 * (U - 128);

bt2020_limit_range_rgb2yuv = {

        0.2256, 0.5823, 0.0509;
        -0.1227, -0.3166, 0.4392;
        0.4392, -0.4039, -0.0353;

};

Y = 0.2256 * R + 0.5823 * G + 0.0509 * B;
U = -0.1227 * R - 0.3166 * G + 0.4392 * B;
V = 0.4392 * R - 0.4039 * G - 0.0353 * B;

标签:BT2020,BT709,16,0.0,YUV,range,128,1.0,1.1644
From: https://blog.csdn.net/qq_34952376/article/details/136813279

相关文章

  • 【YUV】YUV图像基本处理
    YUV简介YUV是一种色彩编码模型,也叫YCbCr,Y:明亮度U(Chromosnnance):色度V:浓度(Chroma)YUV编码模型的图像一般不能直接用于显示,需要转换为RGB(RGBA)编码模型,才能够正常显示图像2.YUV的几种采样方式YUV图像主流的采样方式:YUV4:4:4:每一个Y分量对于一对UV分量,每像素......
  • Macos arm64 ffmpeg h264 还原成yuv
    首先编译ffmpeg由于编译很多依赖尝试了三天果断放弃~使用brewbrewinstallffmpegbrewinfoffmpegcmakelist.txtcmake_minimum_required(VERSION3.20)project(ffmpeg_baseC)set(CMAKE_C_STANDARD11)set(FFMPEG_DIR/usr/local/Cellar/ffmpeg/6.1.1_3)include_......
  • 如何渲染最原始的yuv视频数据?
    一.整体思路我们在用纹理增加细节那篇文章中提到过,要将图片渲染在屏幕上,首先要拿到图片的像素数组数据,然后将像素数组数据通过纹理单元传递到片段着色器中,最后通过纹理采样函数将纹理中对应坐标的颜色值采样出来,然后给最终的片段赋予颜色值。现在换成了yuv视频,我们应该如何处......
  • x264 yuv to h264 c99
    如何编译引入x264参考这里正式编码#include<stdint.h>#include<x264.h>#include<stdio.h>#include<unistd.h>#include<fcntl.h>#include<stdlib.h>#include<string.h>#defineCLEAR(x)(memset((&x),0,sizeof(x)))#def......
  • python 播放 yuv
    mp4toyuvffmpeg-ivideo1.mp4video1.yuv使用python直接播放yuvimportcv2importnumpyasnpdefplay_yuv(file_path,width,height):yuv_file=open(file_path,'rb')frame_size=int(width*height*3/2)whileTrue:frame_......
  • SDL2+SDL_Thread+SDL_Event实现yuv文件的播放
    一、概述上一节使用单线程播放了YUV文件。在一个线程中播放yuv文件逻辑看起来简单,但是会产生一些问题。如:视频卡顿、无响应等问题。本节在上一节的基础上对播放YUV文件的代码进行改造,加入SDL_Event和SDL_Thread。使SDL_Thread现成发出命令时刷新YUV视频帧。等收到结束命......
  • SDL播放YUV数据
    一、概述上一节使用SDL2在窗口上显示了一张图片,本节使用SDL2播放YUV420P数据。YUV420P一帧数据的长度=width*height*3/2二、代码示例下面这段示例代码读取YUV数据和现实YUV数据都是在同一个线程中的。播放是能播放,但是会很卡,不一会儿就会出现无响应的情况。下一节......
  • Android端如何实现拉取RTSP/RTMP流并回调YUV/RGB数据然后注入轻量级RTSP服务?
    技术背景我们在对接开发Android平台音视频模块的时候,遇到过这样的问题,厂商希望拉取到海康、大华等摄像机的RTSP流,然后解码后的YUV或RGB数据回给他们,他们做视频分析或处理后,再投递给轻量级RTSP服务模块或RTMP推送模块,实现处理后的数据,二次转发,本文以拉取RTSP流,解析后再注入轻量级RTS......
  • Windows下ffmpeg调用测试(YUV420P编码)
    1下载静态库和动态库如果你是动态加载,可以直接使用动态库(dlopen等);否则就才用动态+静态的方式(动态库的静态加载方式);或者直接将静态库编译到你的执行程序(纯静态组件使用);https://www.gyan.dev/ffmpeg/builds/#libraries 添加组件vs2022: 属性->c/c++->附加包含目录;将头文件......
  • FFMPEG--使用Filter实现YUV图像翻转
    工具:ffmpeg过滤器模块相关过滤器,其创建过程如下:创建一个过滤器节点,如overlay:avfilter_get_by_name(“overlay”);创建一个过滤器上下文并将其添加到FilterGraph上,如:avfilter_graph_create_filter(&overlayFilter_ctx,overlayFilter,“overlay”,“y=0:H/2”,NULL,filter_graph......