1.RGB像素格式

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

RGB显色模式大多应用在电子屏幕上,每一个像素点都是由R\G\B三种颜色叠加而成。存储表示时对每一种颜色进行256级量化,每一个颜色可以用一个8位的二进制数进行存储和表示,常用RGB颜色模式有RGB24位,以及RGB32。RGB24是指R\G\B各占8位;RGB32是指R\G\B\A四个分量各8位,A是指透明度。对一个w*h的图像,用RGB24格式存储时,需要w*h*8*3 bit的空间。存一幅RGB图片时是从左至右再从上至下一个像素点一个像素点的存储,一个像素分配24bit空间,从左至右R\G\B各占8bit通道。

(RGB还有RGB555和RGB565两者存储格式,这两者称为高彩色,RGB24和RGB32称位真彩色)

2.YUV像素格式

YUV色彩模式主要用于优化彩色视频信号的传输,对于黑白电视,用RGB颜色传输会大大浪费带宽,黑白电视只需要用一个8位二进制数进行量化。为了兼容黑白与彩色,因此发明了YUV。Y是指明度、U\V则是表现色度(色调和饱和度)用是描述影像色彩及饱和度,用于指定像素的颜色。YUV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV。如果只有Y分量则是黑白电视。

YUV每个分量也是采用8位量化的,但是大多是YUV格式平均使用的每像素位数都少于24位元,主要是为了节省空间对YUV进行了抽样,在整幅图像中对YUV进行了抽样,因此并不是每一个像素点都完全由YUV三个分量组成。主要有以下几种抽样方式

 YUV4:4:4  完全抽样,每一个Y对应一组UV分量,对于w*h的一幅图像,存储需要w*h*3*8bit= 3*w*h 字节

YUV4:2:2 表示2:1水平抽样,垂直2:1抽样,每两个Y共用一组UV分量,对于w*h的一幅图像,存储需要w*h*1*8+w*h*1*8/2bit +w*h*1*8/2bit=2*w*h 字节

YUV4:2:0 表示2:1的水平抽样,垂直2:1抽样,每四个Y共用一组UV分量对于w*h的一幅图像,存储需要w*h*8bit+w*h**8bit/4+w*h**8bit/4=3/2*w*h 字节

YUV4:1:1 表示4:1水平抽样,垂直完全抽样,每四个Y共用一组UV分量对于w*h的一幅图像,存储需要w*h**8bit+w*h**8bit/4+w*h**8bit/4=3/2*w*h 字节

(YUV420并不是说有一个分量不存在,而是对uv分量交错取样)

YUV的存储格式有以下两种

  • 紧缩格式(packed formats):将Y、U、V值储存成Macro Pixels阵列,和RGB的存放方式类似。
  • 平面格式(planar formats):将Y、U、V的三个分量分别存放在不同的矩阵中。

紧缩格式(packed format)中的YUV是混合在一起的,对于YUV4:4:4格式而言,用紧缩格式很合适的,因此就有了UYVY、YUYV等。

YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。

UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。

平面格式(planar formats)是指每Y分量,U分量和V分量都是以独立的平面组织的,也就是说所有的U分量必须在Y分量后面,而V分量在所有的U分量后面,此一格式适用于采样(subsample)。平面格式(planar format)有I420(4:2:0)、YV12、IYUV等。

YUV422P也属于YUV422的一种,它是一种Plane模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00。

I420和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。注意,上图中,Y00、Y01、Y10、Y11共用U00、V00,其他依次类推。左图为I420,右图为YV12​       

NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y00、Y01、Y10、Y11共用U00、V00,左图为NV12,右图为NV21

​             

 常用的是YUV420中的I420\NV21\NV12

3.rgb与YUV转换

rgb与YUV之间可以相互转换,基本上所有图像算法都是基于yuv的;而所有显示面板都是接收rgb数据”,侧面的理解是在进行颜色数据运算时使用的是YUV颜色编码,而对图像经过后期处理进行显示时则用的是RGB编码。

4.YUV与RGB像素格式的处理

主要涉及:

分离YUV420P像素数据中的Y、U、V分量

分离YUV444P像素数据中的Y、U、V分量

将YUV420P像素数据去掉颜色(变成灰度图)

将YUV420P像素数据的亮度减半

将YUV420P像素数据的周围加上边框

生成YUV420P格式的灰阶测试图

计算两个YUV420P像素数据的PSNR

将RGB24格式像素数据封装为BMP图像

分离RGB24像素数据中的R、G、B分量

将RGB24格式像素数据转换为YUV420P格式像素数据

生成RGB24格式的彩条测试图

这一部分请参考(9条消息) 视音频数据处理入门:RGB、YUV像素数据处理_雷霄骅(leixiaohua1020)的专栏-CSDN博客_rgb yuv

像素格式RGB与YUV相关推荐

  1. 【第二季】图像像素格式RGB和YUV的理解

    目录 图像像素格式理解 RGB与YUV 图像像素格式理解 1.颜色的学问 (1)颜色是主观还是客观存在?颜色的本质是光的波长,但是因为有人去看才有了颜色这个概念,所以本质上来说,颜色是主观存在的. ( ...

  2. 音视频基础知识---像素格式RGB

    音视频基础知识汇总: 音视频基础知识---协议相关RTSP RTMP HLS 音视频基础知识---封装格式 音视频基础知识---视频编码格式 音视频基础知识---音频编码格式 音视频基础知识---像素 ...

  3. 【数字视频编码基础学习】像素格式RGB/YUV

    一.RGB概述 R:red,G:Green,B:Blue,即红绿蓝--色光三原色(加法三原色),通过不同比例相加,可产生多种颜色. 补:除色光三原色外,还有另一种颜料三原色(减法三原色),即看到的印刷 ...

  4. 基于 FFmpeg 的跨平台视频播放器简明教程(四):像素格式与格式转换

    系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG + Conan 环境集成 基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux) 基于 ...

  5. 音视频开发基础知识(一)像素格式

    像素格式概念 像素格式指的是图像的具体像素用什么所表示.指的是原始数据或者解码之后的数据. 常见像素格式RGB RGB色彩模式是工业界的一种颜色标准,是通过对红.绿.蓝三个颜色通道的变化以及它们相互之 ...

  6. 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )

    文章目录 一.获取图像真实宽高 二.计算解码区域 三.设置解码参数 内存复用 像素格式 四.图像绘制 五.执行效果 六.源码及资源下载 官方文档 API : BitmapRegionDecoder 在 ...

  7. android表面渲染 哔哩,JS学习:创建一个演示用的渲染库4(渲染表面,像素格式等)...

    本篇的目的是要了解: canvas 像素格式 canvas渲染表面以及内存大小的计算 光栅化 位块传输 图形和图像的区别 上一篇我们了解到: 当css size和 elem size 不一致的时候,会 ...

  8. Opencv(4) RGB, YUV, GRAY像素格式介绍opencv像素格式转换cvtColor接口

    像素格式和灰度图 RGB: RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道的 ...

  9. lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系

    像素深度(bits per pixel,简称bpp) 一个像素的颜色在计算机中由多少个字节数据来描述.计算机中用二进制位来表示一个像素的数据,用来表示一个像素的数据位越多,则这个像素的颜色值更加丰富. ...

最新文章

  1. 基于短语的统计机器翻(PBMT) 开源工具 :Moses
  2. 排名看似毫无波澜的,但 R 语言热度仍在上升 | 8月编程语言排行
  3. mysql计算后精度增大_Mysql用法汇总
  4. 微信小程序开发(二)
  5. VTK:Kochanek样条用法实战
  6. opengl加载显示3D模型blend类型文件
  7. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
  8. ExtJS 2.0官方实例目录
  9. SAP S4HANA custom logic的一个实际例子
  10. Linux简单实用小技巧
  11. 初识函数式编程(Functional Programming,FP)
  12. 变量在函数内外的作用域 3
  13. asp.net 实现登陆实例
  14. linux进阶之子网划分
  15. 1716: [Usaco2006 Dec]The Fewest Coins 找零钱
  16. 微信点餐系统要服务器吗,微信点餐系统,钉钉点餐系统
  17. 定制海报、AI扣人像小程序
  18. XMLWorkerHelper生成pdf文件添加页眉页脚
  19. MATLAB中nargin和nargout的妙用
  20. 微信小程序实战篇-电商(一)

热门文章

  1. 计算机网络第二章知识总结
  2. c++模型推理时 HWC转CHW
  3. 3439 平方数 -java java开方(开根号)
  4. 这些关于基金从业资格证的“坑”,你都踩了多少?
  5. 模糊逻辑学习--模糊推理过程
  6. vue项目打包及查看
  7. C语言每日一练——第75天:谜语博士的难题(二)
  8. python中带有小数的字符串如何转化为数字_python中,如何将字符串转换为数字(将数字转换为整型),字符串的10转换为整型的10,10.5转换为10...
  9. Leaaner Style Sheets(Less)
  10. 密码学系列之六:公钥密码体制