当前位置: 首页 > news >正文

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换,包括YUV444 颜色编码格式 转为 RGB 格式 ,RGB颜色编码格式转为 YUV444 格式。
一、 YUV与RGB之间的转换
YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ;
YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV 的具体子采样格式 :

  • YUV444
  • YUV422
  • YUV420

1、YUV444颜色格式转为RGB格式的转换公式如下 :
R = Y + 1.13983 * (V - 128)
G = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128)
B = Y + 2.03211 * (U - 128)
公式中UV 色度值分量减去 128 , 是因为这两个分量都是从中心值 ( 256 / 2 = 128 ) 进行偏移的 , 计算时需要先将这个偏移量减去 , 然后将其转换到正确的范围中 ;
上述计算的颜色位深度 是 8 bit , 也就是1字节 , 取值范围是 0 ~ 255 , 有 256 个值 , 128 的偏移量也就是这个值的中间值 ;
如果计算出来的 RGB分量小于 0 , 则取 0 值 ;
如果计算出来的 RGB分量大于255 , 则取 255 ;

如果 YUV 解码错误 , 导致三个分量的值都是 0 , 则最终计算时 , 得到如下 3 个 RGB 分量值 ;
在这里插入图片描述
若计算出来RGB分量小于 0 , 则取0值 , 因此R和B分量都是0 , 只有G的分量是135.45984 , 屏幕显示绿色 。
2、RGB 颜色格式转为YUV444 格式的转换公式如下 :
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.14713 * R - 0.28886 * G + 0.436 * B + 128
V = 0.615 * R - 0.51498 * G - 0.10001 * B + 128
UV 分量在计算后增加一个中间值偏移量 , 这个中间值一般是256的一半 128 , 确保UV值在合适范围之内 ;
上述计算颜色位深度是8bit , 也就是1字节 , 取值范围是 0 ~ 255 , 有256个值 , 128的偏移量也就是这个值的中间值 ;
3、YUV 格式各分量的取值范围
广播电视标准 : BT601标准 , BT709标准 , BT2020标准 ,Y 分量取值范围 : 16 ~ 235 ,UV分量取值范围 : 16 ~ 240 ;在FFmpeg中 , 这种范围称为 " MPEG 范围 ",这类标准是在电视信号中使用的 ;
计算机标准 : 在FFmpeg中, 这种范围称为 "JPEG 范围 ",YUV分量取值范围 : 0 ~ 255 ,这类标准是在计算机 中使用的。
4、转换函数库
实际使用时 , RGB与YUV 编码格式转换 , 都调用接口实现 , 如 FFmpeg 的 swscale 库 , 或者 libyuv 库 ;
FFmpeg的swscale 库是用于图像缩放和像素格式转换的库 , 该函数库提供了 高度优化的函数 , 用于在不同的像素格式之间进行转换 , 以及进行图像的大小调整 ;
libyuv库是Google 提供的一个用于处理YUV和RGB 图像数据之间转换的跨平台库 , 该函数库 支持各种YUV格式与RGB 格式之间的相互转换 , 以及图像的缩放、旋转和裁剪等操作 ;

http://www.lryc.cn/news/336429.html

相关文章:

  • PostgreSQL入门到实战-第十四弹
  • 分布式数据库中间件 Mycat 和 ShardingSphere 对比
  • Python实现BOA蝴蝶优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战
  • 3D Web轻量化引擎HOOPS Commuicator如何从整体装配中创建破碎的装配零件和XML?
  • 关于运行阿里云直播Demo pub get 报的错
  • C语言调用Python
  • SVN客户端异常问题处理
  • gin+sse实现离散的消息通知
  • C++ //练习 11.38 用unordered_map重写单词计数程序(参见11.1节,第375页)和单词转换程序(参见11.3.6节,第391页)。
  • 【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL
  • 基于SpringBoot+Vue的果蔬种植销售一体化服务平台(源码+文档+部署+讲解)
  • 数据结构面试
  • Linux 上安装 SQLite
  • C++模板初阶(个人笔记)
  • 如何用Java后端处理JS.XHR请求
  • 分布式锁-redission
  • C/C++ 自定义头文件,及头文件结构详解
  • 快速列表quicklist
  • 《MATLAB科研绘图与学术图表绘制从入门到精通》
  • Day3-struct类型、列转行、行转列、函数
  • C++设计模式:构建器模式(九)
  • OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时
  • 【Tars-go】腾讯微服务框架学习使用01--初始化服务
  • 通过pre标签进行json格式化展示,并实现搜索高亮和通过鼠标进行逐个定位的功能
  • 5分钟了解清楚【osgb】格式的倾斜摄影数据metadata.xml有几种规范
  • CCIE-10-IPv6-TS
  • 《QT实用小工具·十七》密钥生成工具
  • CSP 比赛经验分享
  • 探究“大模型+机器人”的现状和未来
  • Commitizen:规范化你的 Git 提交信息