音视频学习笔记----3,音视频编码基础学习之-YUV与RGB
上一篇我们已经安装并简单学习了H.264的一些基础知识,本节开始记录学习YUV与RGB,以作备忘。同样采用自我总结 + 优秀摘录的方式记录。
RGB介绍 :
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。
YUV简介:
YUV的原理是把亮度和色度分离,人眼对亮度的敏感度超过色度。YUV三个字母中,其中”Y”表示明亮度(Lumina nce或Luma),也就是灰阶值;而”U”和”V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
那 么YUV又从何而来呢?在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到 RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送 出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。
YUV优势:彩色YUV转黑白YUV图像非常简单,该特性用于电视信号上,YUV数据总尺寸小于RGB格式。YUV将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。
用三个图(网上截取)来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
YUV与RGB相互转换:
公式如下(RGB取值范围均为0-255):
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
查到的转换code:
RGB->YUV:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B − Y )
Cr = 0.713(R − Y )
代码:
uint8_t COL_RgbToYuv(uint8_t R,uint8_t G,uint8_t B, uint8_t *y,int8_t *u,int8_t *v)
{
float rr=R,bb=B,gg=G;
float yy,uu,vv;
yy=0.299*rr+ 0.587*gg+ 0.114*bb;
uu=-0.169*rr+ -0.331*gg+ 0.5*bb;
vv=0.5*rr+ -0.419*gg+ -0.081*bb;
if(uu>127) uu=127;
if(uu-127) uu=-127;
*u=(int8_t)floor(uu);
if(vv>127) vv=127;
if(vv-127) vv=-127;
*v=(int8_t)floor(vv);
if(yy>255) yy=255;
if(yy0) yy=0;
*y=(uint8_t)floor(yy);
return 1;
}
YUV->RGB:
R = Y + 1.402Cr
G = Y − 0.344Cb − 0.714Cr
B = Y + 1.772Cb
代码:
uint8_t COL_YuvToRgb( uint8_t y,int8_t u,int8_t v,uint8_t *r,uint8_t *g,uint8_t *b)
{
float rr,bb,gg;
float yy=y,uu=u,vv=v;
rr= yy+ 1.402*vv;
gg= yy+ -0.344*uu+ -0.714*vv;
bb= yy+ 1.772*uu ;
#define CLIP(x) if(x>255) x=255; else if (x0) x=0;x=x+0.49;
#define CVT(x,y) CLIP(x);*y=(uint8_t)floor(x);
CVT(rr,r);
CVT(gg,g);
CVT(bb,b);
return 1;
}
音视频学习笔记----3,音视频编码基础学习之-YUV与RGB相关推荐
- 【学习笔记】【PS】基础学习篇(持续更新中...)
[视频地址]:https://www.bilibili.com/video/BV1YW411e7n5?p=1 目录 主界面:菜单栏.选项栏.工具栏.面板 常用分辨率设置 颜色模式 像素公式 前期的常规 ...
- unity学习笔记(1)unity基础学习
(一)界面和操作 场景.检查器: 物体居中:选中物体--F 鼠标中 点击拖动 滑动缩放 鼠标右 旋转 alt+左键 围绕旋转 alt+右键 放大缩小 ctrl+D 复制并黏贴 v+左键 顶点吸附 轴心 ...
- Python学习笔记(28)~爬虫基础学习:伪装
伪装 作用:伪装成真实用户向服务器发起请求.因为有一些网站知道你是爬虫,会拒绝访问. 向豆瓣(douban.com)发起请求(直接,不伪装) Demo #!/usr/bin/python3 impor ...
- HTML5学习笔记之音视频标签
HTML5学习笔记之音视频标签 其他HTML5相关文章 HTML5学习笔记之HTML5基本介绍 HTML5学习笔记之基础标签 HTML5学习笔记之表格标签 HTML5学习笔记之表单标签 HTML5学习 ...
- AVFounction学习笔记之--音视频播放.md
AVFounction学习笔记之–音视频播放 AVFounction是用于处理音视频的框架.它位于Core Audio.Core Video.Core Media.Core Animation框架之上 ...
- web三维gis引擎cesium的学习笔记(包含视频融合和动态纹理)
文章目录 web三维gis引擎cesium的学习笔记(包含视频融合和动态纹理) Cesium.Viewer 坐标系 位置方向 官方api文档及示例 Entity API Primitives API ...
- 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述
<繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...
- 深度学习笔记(2) 神经网络基础
深度学习笔记(2) 神经网络基础 1. 二分类 2. 逻辑回归 3. 逻辑回归的代价函数 4. 梯度下降法 5. 逻辑回归中的梯度下降 6. 简化的代价函数 1. 二分类 逻辑回归是一个用于二分类(b ...
- 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能
[数据库学习笔记]Day03 - SQL语言基础及数据库定义功能 〇.本文所用数据库表格: 一.关系运算: 关系运算,数学名词,基本运算有两类:一类是传统的集合运算(并.差.交等),另一类是专门的关系 ...
- 学习笔记(二)——CSS基础
文章目录 一.什么是CSS 二.CSS基本使用 2.1.行内式(内联样式) 2.2.内部样式 2.3.外部样式 2.3.1.嵌入式 2.3.2.导入式 三.选择器 3.1.基础选择器 3.1.1.标签 ...
最新文章
- 【设计模式】 面向对象六大设计原则
- 深入理解Java中的String
- 未检测到正确安装的网络适配器_电脑网络适配器有感叹号怎么解决?
- 一开始买的是MacBook air,后来分了专业之后发现要用的软件需要Windows系统,该怎么办?
- Linux MySQL主主复制(Replication)(MySQL数据双向同步)配置
- 拿3000工资与30000工资的区别,5张聊天记录让你醍醐灌顶
- 畅捷通T+ RAP(Rapid Application Platform)快速应用开发平台
- SSM毕设项目汽车4S店管理系统ei9uo(java+VUE+Mybatis+Maven+Mysql)
- Exploring Simple Siamese Representation Learning
- 惠普计算机图标不在桌面,惠普笔记本电脑桌面图标显示图标不正常如何还原 惠普笔记本电脑桌面图标显示图标不正常还原的方法...
- php 简转繁体,php如何实现简体繁体转换
- 在配置DNS后服务器启动失败问题的排查
- 一文搞懂K-means聚类算法
- buuctf - crypto - Rabbit
- 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
- html5 td上下居中显示,css表格垂直居中怎么设置?
- OpenCv 从零开始第六天笔记 图片马赛克
- USACO2.4.4 Bessie Come Home (comehome)
- C语言实战 - 贪吃蛇(图形界面)
- 5 个免费在线 SQL 数据库环境,简直太方便了!
热门文章
- cdr里怎么看html颜色代码大全,CDR中查看是RGB还是CMYK颜色的三种方法
- Android 自带录屏命令 screenrecord 的使用
- 如何解决在虚拟机中安装Linux系统后界面过小的问题
- Fabric 1.0源代码分析(30) Orderer #BroadcastServer(Broadcast服务端)
- AWS EC2实例管理
- PS 处理增加图片阴影
- notepad++使用技巧小结(智能高亮,设置高亮颜色,取消高亮)
- 【Error解决实录】InsecureRequestWarning: Unverified HTTPS
- 动态规划算法的设计要点(笔记)
- SVG(可伸缩向量图形)基础教程