RGB、YUV像素基础知识及处理数据


目录

  1. RGB
  2. YUV
  3. RGB、YUV像素数据处理

转载自Gemfield的知乎文章:从YUV到RGB
转载自雷神的博客:视音频数据处理入门:RGB、YUV像素数据处理


1. RGB

1. RGB基本概述

  1. RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。

  2. 通常情况下,RGB各有256级亮度,用数字表示为从0、1、2…直到255,所以每一个颜色用1个字节=8bit就可以完全在计算机内部表示出来。按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色,也称为24位色(2的24次方)。

  3. 比如一张1080p的图片,代表着有 1920 * 1080 个像素点。如果采用 RGB 编码方式,每个像素点都有红、绿、蓝三个原色,其中每个原色占用 1 个字节,每个像素占用3个字节,则一张1080p的图片就占用 1920 * 1280 * 3 / 1024 / 1024 = 7.03125MB 存储空间。比如著名的BMP位图就是这样保存图片的(所谓的RGB888格式,或者24位位图格式)。

  4. 图片的信息量有7.03125MB并不代表对应的图片文件的大小就是7.03125MB,因为两点:

    1. 图片的信息会被压缩,减小文件的大小;
    2. 图片文件会注入meta data,又会稍微增大文件大小;
  5. 总体上图片文件肯定是变小了。而压缩又主要分为两种:

    1. 无损压缩,比如BMP位图文件——顶多是使用行程长度编码(RLE,run-length encoding)来进行轻度的无损数据压缩(COCO数据集的分割data也使用了RLE),所以7.03125MB大小的内容会保存为6MB左右的文件;
    2. 有损压缩,最流行的就是jpg了,各种复杂的压缩算法,会根据图片内容的不同,使得图片文件的大小降低到几十KB到几百KB左右。

2. RGB的格式

简单来讲,RGB在计算机中的表示主要分为两大类,一种是索引形式,一种是像素形式。

  1. 索引:

    1. 诸如RGB1,RGB4,RGB8,分别表示每个像素用1个bit,4个bit, 8个bit来表示,那么,这些bit存储的并非是实际的R,G, B值,而是对应点的像素在调色板中的索引。
  2. 像素形式:
    1. 诸如RGB565,RGB555,RGB24,RGB32,ARGB32,这些格式,存储的是每一个像素点的R,G,B值。比如RGB24,分别用8个bit去表示R, G, B。

3. RGB图片中的CHW和BGR概念

  1. 以著名的图像算法库OpenCV为例,我们常常听到一个概念:一个API输出或者输出的图片格式是CHW还是HWC,是RGB还是BGR…但是这代表什么意思呢?
  2. 使用一个例子来解释下,在Python中,使用OpenCV来读取一个图片gemfield.jpg(640x640):
  3. (640, 640, 3)这样的结果一看就是hwc格式(HWC三个字母分别代表Height、Width、Channel),相当于在内存中,img是个三维数组,从外层向内层依次是height、width、channel;也就是说:img是由640个height组成的,每个height是由640个width组成的,每个width是由3个channel组成的。而在每个width上,如果是BGR格式,则一个width就是[B,G,R],如果是RGB的话,则一个width就是[R,G,B]。而OpenCV的imread输出的是BGR格式,因此img对象看起来就是这样的三维数组:
  4. 如果想要把hwc格式转换为chw格式,则使用numpy的transpose:
  5. 那么就是chw格式了,img依然是BGR格式,依然是3维数组:由3个channel组成,每个channel由640个height组成,每个height由640个width组成。img在内存中看起来就是这样:

2. YUV

1. YUV基本概述

  1. 大家已经知道的是,YUV 编码采用了明亮度和色度表示每个像素的颜色。其中Y表示明亮度(Luminance、Luma),也就是灰阶值。U、V 表示色度(Chrominance 或 Chroma)。Y’UV是工程师希望在黑白基础结构中使用彩色电视时发明的。他们需要一种与黑白(B&W)电视兼容的信号传输方法,同时又能增加色彩。亮度分量已经以黑白信号形式存在,于是他们添加了UV信号作为解决方案。

  2. Y’UV模型根据一个亮度分量(Y’)和两个色度分量(分别称为U(蓝色投影)和V(红色投影))定义了色彩空间。Y’UV颜色模型用于PAL 复合彩色视频(不包括PAL-N)标准中。先前的黑白系统仅使用亮度(Y’)信息。颜色信息(U和V)是通过副载波单独添加的,因此黑白接收器仍然能够以接收器的本机黑白格式接收和显示彩色图片。

  3. Y’代表亮度分量(亮度),U和V代表色度(颜色)分量;术语Y’UV,YUV,YCbCr,YPbPr等的范围有时是模棱两可和重叠的。历史上,术语YUV和Y’UV用于电视系统中颜色信息的特定模拟编码,而YCbCr用于颜色信息的数字编码,适用于视频和静止图像压缩和传输,例如MPEG和JPEG。如今,术语YUV在计算机行业中通常用于描述使用YCbCr编码的文件格式。

  4. YUV不是一种格式,而是有多种细分格式。从存储格式维度和采样格式维度来分别介绍下。

2. YUV的存储格式

  1. 首先,YUV按照储存方法的不同,可以分为packeted formats和planar formats;前者是YUV分量交叉排着,类似于RGB领域的hwc;后者是YUV分量分成三个数组存放,不掺和在一起,类似于RGB领域的chw。

3. YUV的采样格式

  1. 其次,YUV根据采样率和采样方式的不同,又可以划分为各种格式。
  2. 要说YUV相比于RGB有什么优势,那就是节省空间。为什么呢?因为YUV分量中,UV分量对人眼来说不敏感,因此可以降低采样率,而对人的视觉又不构成什么影响。以下面的YUV420格式来说:
  3. 可以看到UV分量只有Y分量的四分之一,这样每4个像素就是6个字节(而RGB是12个字节),相比RGB节省了一半空间。除了YUV420外,还有YUV444(和RGB一样的空间大小)和YUV422等主流格式。

4. 主流的YUV420格式

  1. 这些主流YUV格式中,YUV420更常见(因为更节省空间啊),而从YUV420这种采样格式引申出来,叠加上不同的存储格式,就又可以细分为很多。你可以参考:http://www.fourcc.org/yuv.php 。
  2. 当YUV420采样格式叠加上planar 储存格式后,可以产生出YUV420P和YUV420SP格式。YUV420P是Y之后U之后V来储存,相当于RGB中的chw了,又可以细分为I420(又叫YU12)和YV12格式;而YUV420SP是Y之后UV交替…,又可以细分为NV12和NV21格式。这四种细分格式如下所示:
    1. NV12 ,FourCC为0x3231564E ,1个像素12 bit, 8-bit Y plane,Y通道平面结束后是交叉进行的 U/V 通道平面,U/V使用2x2的采样率(各是Y的四分之一)。
    2. NV21 ,FourCC为0x3132564E ,1个像素12 bit, 和NV12一样——除了U/V交叉的时候是先V再U,也就是U/V和V/U的区别;这个是Android上摄像头图像的标准;
    3. I420 (也叫YU12),FourCC为0x30323449 ,1个像素12 bit,8 bit Y 通道平面结束后,是U通道平面,最后是V通道平面;
    4. YV12 ,FourCC为0x32315659,1个像素12 bit,8 bit Y 通道平面结束后,是V通道平面,最后是U通道平面;

5. YUV到RGB的转换

  1. 一边是YUV格式的生产者,一边是RGB格式的消费者。那如何从YUV转换到RGB呢?上文已经说过,YUV的细分格式有很多种(几十种),没有那么多的精力,也没必要花那个精力一一介绍,因此,这里只给出主流中的主流YUV格式到RGB的转化。
1. Y’UV420p(和Y’V12或YV12)到RGB888的转换
  1. Y’UV420p是平面格式,这意味着Y’,U和V值组合在一起而不是散布在一起。这样做的原因是,通过将U和V值分组在一起,图像变得更加可压缩。当给定Y’UV420p格式的图像数组时,所有Y’值首先出现,然后是所有U值,最后是所有V值。

  2. Y’V12格式本质上与Y’UV420p相同,但是它切换了U和V数据:Y’值后跟V值,最后是U值。只要注意从适当的位置提取U和V值,就可以使用相同的算法处理Y’UV420p和Y’V12。

  3. 与大多数Y’UV格式一样,Y’值与像素一样多。在X为像素数,则数组中的前X个元素是对应于每个单独像素的Y’值。但是,U和V值只有Y的四分之一,这意味着每个U和V元素均适用于四个像素。

  4. 如上图所示,Y’UV420中的Y’,U和V分量分别在顺序块中编码。为每个像素存储一个Y’值,而为每个2×2正方形像素块分别存储一个U值和一个V值。上图中使用相同的颜色显示了相应的Y’,U和V值。从设备逐行读取字节流,Y’块位于位置0,U块位于x×y(在此示例中为6×4 = 24),V块位于位置x ×y +(x×y)/ 4(这里6×4 +(6×4)/ 4 = 30)。


3. RGB、YUV像素数据处理

视音频数据处理入门:RGB、YUV像素数据处理


RGB、YUV像素基础知识及处理数据相关推荐

  1. 动画自动滚动div/像素基础知识/手机端样式选择/

    大体上和原网页差不多,一个主页和一个子页面 动画自动滚动div: <!DOCTYPE html> <html> <head> <meta charset=&q ...

  2. 第二篇 python基础知识总结:数据、运算符

    引子 我们跟任何人交流,说的每一句都是都一些文字组成,包含名词.动词.语句.标点符号等,组成我们说普通话构成的基本要素.同理我们学习python语言也要明白这些基本要素,也就是我们常说的基本语法,这是 ...

  3. SQL Server 索引基础知识(1)--- 记录数据的基本格式

    不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页.所以理解数据页是最最基础的知识点,本篇博客就介绍跟索引有关的数据页的一些基础知识. 数据页的基础知识 SQL Server 中数据存 ...

  4. SQL Server 索引基础知识 1 --- 记录数据的基本格式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 由于需要 ...

  5. Halcon基础知识:常规数据、对象数据、对象元组

    一.说明 halcon到底有多少数据类型,这是一个相当重要的知识:初学者如果看了几十个程序案例,自然对此感兴趣.本文将介绍两种数据:常规数据,对象数据:以及出现的机会,1)程序一般处理过程,2)调用函 ...

  6. 【三维重建】三维重构基础知识、三维数据、重建流程

    文章目录 1.在计算机内生成三维信息 三维图像重构: 四个坐标系 坐标系转换 内参矩阵 外参矩阵 图像采集设备的标定方法: 2.相关概念 (1)彩色图像和深度图像 (2)PCL (3)点云数据(PCD ...

  7. 数据标注基础知识:文本数据标注的类型及应用场景

    目录 一.文本数据标注的类型 二.文本数据标注的基本流程 三.文本数据标注应用场景 (1)新零售行业: (2)客服行业: (3)广告行业: (4)金融行业 自然语言处理是指用计算机对自然语言信息进行处 ...

  8. Python基础知识进阶之数据爬虫

    一.爬虫概述 爬虫是指利用网络抓取模块对某个网站或者某个应用中有价值的信息进行提取.还可以模拟用户在浏览器或者APP应用上的操作行为,实现程序自动化.简单来说就是我们把互联网有价值的信息都比喻成大的蜘 ...

  9. 类型数据合并去重 mysql_MySQL基础知识 数据类型和数据表管理

    欢迎点击上方蓝字关注我 〇.MySQL数据类型 1. 数值数据类型 数值数据类型存储数值. MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围. 整数 长度 int(n) 与 zerof ...

最新文章

  1. MIT博士生、北大校友,利用自监督算法,解决了数据集中这一常见的“难题”...
  2. mysql gfs2_Mysql_HA+IP_SAN+Clvmd+GFS2
  3. C#编程(七十四)----------释放非托管资源
  4. 如何用函数表示数(四)数的彻底消失
  5. [转]VisualStudio如何组织解决方案的目录结构
  6. linux 声明消息函数,linux消息队列函数--解析
  7. java中对象清空值_对象的引用和清除_Java语言程
  8. 国美易卡设置cookie域,国美易卡匹配domain
  9. android webview 手机兼容问题
  10. 6-1 单链表逆转 (20 分)
  11. AVX钽电解电容参数指标
  12. 大数据展示 定位_大数据平台 定位
  13. 二叉树高度 [log2n]+1与log2(n+1)是否相等
  14. 飞桨领航团AI达人创造营第一课2021.7.26
  15. Libra,一场赛博朋克噩梦!
  16. (2016/02/19)多传感器数据融合算法---9轴惯性传感器
  17. 使用Plink对SNP数据进行质量控制
  18. [SMOJ220]太空飞行计划
  19. 科研方法教学资料汇总
  20. Vue2.0不可忽视的变化

热门文章

  1. [译] 标准化的包布局(Standard Package Layout)
  2. job history 的查看
  3. WEB请求处理六:浏览器HTTP协议漫谈
  4. EF Code First 学习笔记:关系
  5. linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
  6. Cisco测试命令和TCP/IP连接故障处理
  7. CodeForces - 165E Compatible Numbers(SOSdp)
  8. HDU - 4902 Nice boat(线段树)
  9. POJ - 2516 Minimum Cost(最小费用最大流)
  10. 计算机重启如何进入设置界面,win7电脑无法正常启动,一开机就进入到bios设置界面怎么办?...