视频与图像RGBYUV格式详解
- 格式:doc
- 大小:24.00 KB
- 文档页数:5
yuv格式计算
YUV格式是一种用于表示图像和视频的颜色空间,由Y、U、V三个部分组成,其中Y表示亮度,U和V表示颜色的色度。
在图像处理和视频编码领域,YUV格式被广泛应用,因为它相较于RGB格式可以更有效地存储和传输颜色信息。
YUV格式的计算方法取决于图像的采样方式和分辨率。
以下是以YUV 4:2:0采样格式为例的计算方法:
1. 首先,将RGB三原色转换为YUV格式。
对于每个像素的RGB值(R,G,B),按照以下公式计算Y、U、V值:
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.147 * R - 0.144 * G + 0.274 * B
V = 0.439 * R - 0.368 * G + 0.131 * B
2. 接下来,根据YUV采样格式进行色度抽样。
在YUV 4:2:0格式中,每个Y像素对应两个U和V像素。
因此,需要将计算得到的U和V 值进行色度抽样,得到对应的U'和V'值。
色度抽样的方法有很多种,如线性插值、二次插值等。
3. 将得到的Y、U'、V'值组合成一个YUV格式的数据块。
通常,YUV 数据块的存储顺序是YUV、YUV、...依次排列。
4. 最后,按照图像的分辨率和其他参数,将YUV数据块进行分组和编码。
常见的编码格式有MPEG-4、H.264等。
需要注意的是,不同的采样格式、分辨率和其他参数可能导致计算方法略有不同。
在实际应用中,根据具体需求选择合适的计算方法和编码格式。
yuv444的格式YUV444是一种视频色彩编码格式,它将图像的亮度(Y)和色度(U和V)分量分别以全分辨率进行采样和编码。
下面我将从多个角度来解释YUV444的格式。
1. 基本原理:YUV444采用了无损的色度子采样,即对每个像素的亮度和色度分量进行独立的采样,没有任何信息的丢失。
每个像素的Y分量表示亮度信息,而U和V分量表示色度信息。
2. 采样方式:在YUV444中,每个像素的亮度、色度分量都以完整的分辨率进行采样。
这意味着对于每个像素,都有一个对应的Y、U和V值。
相比于其他YUV格式,如YUV420或YUV422,YUV444的色度分量采样更为精确,图像质量更高。
3. 数据存储方式:在存储上,YUV444可以以不同的方式进行排列。
一种常见的方式是将Y、U和V分量按顺序依次存储,即每个像素的Y、U和V值依次排列。
另一种方式是将Y、U和V分量分开存储,即首先存储所有像素的Y值,然后是U值,最后是V值。
4. 颜色表示范围:YUV444可以表示广泛的颜色范围。
在标准的YUV444中,亮度(Y)分量的取值范围是0-255,而色度(U和V)分量的取值范围也是0-255。
这意味着每个分量都可以表示256个不同的亮度或色度级别。
5. 应用领域:YUV444广泛应用于需要高质量图像的领域,如专业视频编辑、图像处理、计算机图形学等。
由于它没有色度子采样,能够保留更多的细节和色彩信息,因此在一些对图像质量要求较高的应用中得到广泛应用。
总结起来,YUV444是一种视频色彩编码格式,它采用无损的色度子采样方式,对每个像素的亮度和色度分量进行独立的采样和编码。
它以完整的分辨率存储每个像素的Y、U和V值,能够表示广泛的颜色范围,适用于需要高质量图像的应用领域。
TCC8900 VPU分析——常见视频编解码格式及RGB和YUV存储格式预研一、常见视频编解码格式1视频文件类别常言道:物以类聚,人以群分。
视频文件也不例外,细细算起来,视频文件可以分成两大类:其一是影像文件,比如说常见的VCD便是一例。
其二是流式视频文件,这是随着国际互联网的发展而诞生的后起视频之秀,比如说在线实况转播,就是构架在流式视频技术之上的。
1.1影像格式 日常生活中接触较多的VCD、多媒体CD光盘中的动画……这些都是影像文件。
影像文件不仅包含了大量图像信息,同时还容纳大量音频信息。
所以,影像文件的“身材”往往不可小觑。
1)AVI格式2)MOV格式3)MPEG/MPG/DAT格式1.2流式视频格式 目前,很多视频数据要求通过Internet来进行实时传输,前面我们曾提及到,视频文件的体积往往比较大,而现有的网络带宽却往往比较“狭窄”,千军万马要过独木桥,其结果当然可想而知。
客观因素限制了视频数据的实时传输和实时播放,于是一种新型的流式视频(Streaming Video)格式应运而生了。
这种流式视频采用一种“边传边播”的方法,即先从服务器上下载一部分视频文件,形成视频流缓冲区后实时播放,同时继续下载,为接下来的播放做好准备。
这种“边传边播”的方法避免了用户必须等待整个文件从Internet上全部下载完毕才能观看的缺点。
到目前为止,Internet上使用较多的流式视频格式主要是以下三种:1)RM(Real Media)格式 RM格式是RealNetworks公司开发的一种新型流式视频文件格式,它麾下共有三员大将:RealAudio、RealVideo和RealFlash。
RealAudio用来传输接近CD音质的音频数据,RealVideo用来传输连续视频数据,而RealFlash则是RealNetworks公司与Macromedia公司新近合作推出的一种高压缩比的动画格式。
RealMedia可以根据网络数据传输速率的不同制定了不同的压缩比率,从而实现在低速率的广域网上进行影像数据的实时传送和实时播放。
了解显卡视频输出格式RGB与YUV的区别随着科技的不断进步和发展,电脑显卡在我们的日常生活中扮演着越来越重要的角色。
它不仅可以提供图像的处理和计算能力,还决定了我们在电脑上观看视频和玩游戏时的视觉效果。
然而,对于很多人来说,关于显卡视频输出格式RGB与YUV的区别并不是很清楚。
本文将解释这两种常见的视频输出格式之间的差异和应用场景。
一、RGBRGB是红绿蓝三种基本颜色的缩写,它是由红色(R)、绿色(G)和蓝色(B)三种原色组成的。
在RGB格式中,每个像素点都由这三种颜色的不同亮度和强度组合而成。
通过调节每一种颜色的比例和亮度,我们可以创建出丰富多彩的图像。
RGB格式的主要优点是色彩的准确性和稳定性。
由于每个像素点都由三种原色组成,RGB格式可以提供更精确的图像细节和更真实的颜色表现。
这使得它在图像处理、摄影和广告设计等领域得到广泛应用。
然而,RGB格式也存在一些局限性。
首先,它需要更大的数据量来表示每个像素点的颜色信息,这就导致了文件大小的增加。
其次,RGB格式并不适用于所有的视频显示设备,例如电视和视频投影仪等。
这是因为大多数视频显示设备使用的是YUV格式。
二、YUVYUV格式是一种类似RGB的视频编码方式,它由亮度(Y)和色度(U和V)两个分量组成。
亮度分量表示图像的明暗程度,而色度分量则表示图像的颜色信息。
在YUV格式中,图像的亮度和色度分量分别经过压缩和编码处理,以减小数据量。
与RGB相比,YUV格式具有更高的压缩率和更小的文件大小。
这使得在存储和传输大量视频数据时更加高效。
此外,YUV格式也适用于各种视频显示设备,因为它可以根据设备的需求进行颜色转换,并提供适当的色彩空间。
然而,由于YUV格式对颜色信息进行了压缩处理,它相对于RGB格式而言在图像细节和颜色准确性上略有损失。
尽管这种损失在肉眼观察下很难察觉,但在一些对颜色表现要求极高的场合,如电影制作和专业摄影等领域,RGB格式仍然被广泛使用。
图文详解YUV420数据格式YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。
并且,YUV不像R GB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV 4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV 值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
先记住下面这段话,以后提取每个像素的YUV分量会用到。
1. YUV 4:4:4采样,每一个Y对应一组UV分量。
2. YUV 4:2:2采样,每两个Y共用一组UV分量。
3. YUV 4:2:0采样,每四个Y共用一组UV分量。
2. 存储方式下面我用图的形式给出常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V。
YUV的色域一、YUV概述YUV是一种常用的颜色编码格式,常用于视频压缩、传输和显示等领域。
现已成为数字电视和视频通信领域的一种标准颜色编码格式。
YUV格式的名字来源于其三个分量:Y、U和V。
其中,Y代表亮度分量,U 和V代表色度分量。
亮度分量(Y)表示图像的明暗程度,色度分量(U和V)表示图像的颜色信息。
这种分离亮度和色度的方式使得YUV在处理图像时更为高效,尤其是在视频压缩方面。
二、YUV的色域组成YUV的色域组成是由其色度分量(U和V)所决定的。
色度分量决定了图像的颜色信息,而亮度分量决定了图像的明暗程度。
在YUV格式中,色度分量U 和V的取值范围通常为[-0.5, 0.5],这样就能表示大部分的颜色信息。
YUV的色域组成通常由一个色度图来表示,其中每个像素点表示一种颜色。
通过色度图,可以直观地看到YUV色域的范围和分布情况。
与RGB等其他颜色编码格式相比,YUV的色域较小,这意味着其在表示一些颜色时可能会丢失一些细节。
三、YUV的优点与局限性YUV作为常用的颜色编码格式,具有以下优点:1.高效性:与RGB相比,YUV更加高效,因为其将亮度信息和色度信息分离处理。
在视频压缩和传输过程中,这种分离处理方式能够大大减少数据量,提高传输效率。
2.兼容性:由于YUV格式已经成为数字电视和视频通信领域的标准格式,因此其被广泛应用于各种设备和系统,具有很好的兼容性。
3.稳定性:YUV格式具有较好的稳定性,不易受到光照、色彩和几何失真的影响,因此在视频处理和传输过程中能够保持较好的图像质量。
然而,YUV也存在一些局限性:1.色域较小:YUV的色域相对较小,无法覆盖全部的颜色空间,因此在表示一些颜色时可能会丢失一些细节。
2.兼容性带来的问题:由于YUV被广泛应用于各种设备和系统,不同设备和系统间的色域差异可能会导致颜色失真和偏移问题。
为了解决这个问题,需要进行颜色校正和色彩管理。
3.对光照和色彩变化的敏感性:尽管YUV具有一定的稳定性,但在强光照或色彩变化的情况下,可能会出现颜色失真或偏移现象。
yuv的y值的范围
YUV是一种常用的颜色编码格式,主要用于数字图像和视频的处理和传输。
在YUV颜色空间中,Y表示亮度,U和V表示色度,其中Y 的取值范围是0到255。
Y值代表了像素的亮度信息,是图像中最重要的分量之一。
亮度是指像素的明暗程度,取值越大表示越亮,取值越小表示越暗。
在YUV颜色空间中,Y分量的取值范围是0到255,其中0表示最暗的黑色,255表示最亮的白色。
Y分量的取值范围决定了图像的对比度和明暗程度。
较大的Y值表示较亮的像素,较小的Y值表示较暗的像素。
通过调整Y分量的取值范围,可以改变图像的明暗对比度,使图像更加清晰、生动。
在数字图像和视频的处理中,通常会对Y分量进行调整和处理。
例如,在图像增强算法中,可以通过增加Y分量的值来提高图像的亮度和清晰度。
在色彩调整算法中,可以通过对Y分量进行线性变换来改变图像的整体亮度。
此外,在视频压缩和编码中,也会对Y分量进行特殊处理,以实现更高的压缩比和更好的视觉效果。
除了亮度信息,Y分量还包含了图像的大部分细节和纹理信息。
在图像处理和分析中,可以通过对Y分量进行边缘检测、纹理提取等算法,来获取图像的结构和特征信息。
这些信息可以用于图像识别、目标跟踪、图像分割等应用领域。
YUV颜色空间中的Y值范围是0到255,代表了图像的亮度信息。
通过调整和处理Y分量,可以改变图像的明暗对比度,提高图像的亮度和清晰度。
同时,Y分量还包含了图像的细节和纹理信息,可以用于图像分析和处理。
对于数字图像和视频的处理和传输,YUV颜色空间和Y分量的范围是非常重要的。
(转)RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解YUY2经常⽤于电视制式以及许多摄像头的输出格式.⽽我们在处理时经常需要将其转化为RGB进⾏处理,这⾥简单介绍下YUY2(YUV)与RGB 之间相互转化的关系:YUY2(YUV) To RGB:C = Y - 16D = U - 128E = V - 128R = clip(( 298 * C + 409 * E + 128) >> 8) G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8) B = clip(( 298 * C + 516 * D + 128) >> 8)其中 clip()为限制函数,将其取值限制在0-255之间.RGB To YUY2(YUV):Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128上述两个公式在代码中的int YUV2RGB(void* pYUV, void* pRGB, int width, int height, bool alphaYUV, bool alphaRGB);int RGB2YUV(void* pRGB, void* pYUVX, int width, int height, bool alphaYUV, bool alphaRGB);函数中转换。
在诸如摄像头的数据获取中,我们往往需要直接在YUY2(YUV)空间上进⾏⼀些图象处理,我们希望能够在YUY2 (YUV)进⾏⼀些RGB上可以做到的处理。
这⾥已blending为例,将两张带有透明度的YUY2(YUV)图⽚进⾏叠加,以达到在RGB空间进⾏图像合成的效果。
深⼊探索视频帧中的颜⾊空间——RGB和YUV接触前端⾳视频之后,需要掌握⼤量⾳视频和多媒体相关的基础知识。
在使⽤ FFmpeg + WASM 进⾏视频帧提取时,涉及到视频帧和颜⾊编码等相关概念。
本⽂将对视频帧中的颜⾊空间进⾏介绍。
视频帧对于视频,我们都知道是由⼀系列的画⾯在⼀个较短的时间内(通常是 1/24 或 1/30 秒)不停地下⼀个画⾯替换上⼀个画⾯形成连贯的画⾯变化。
这些画⾯称之为视频帧。
对于视频帧,在现代视频技术⾥⾯,通常都是⽤ RGB 颜⾊空间或者 YUV 颜⾊空间的像素矩阵来表⽰。
在 ffmpeg ⾥⾯,我们可以看到源码中定义了⼀系列像素格式,绝⼤部分都是 RGB 和 YUV 颜⾊空间类型的。
enum AVPixelFormat {// ... 省略部分不怎么重要的类型///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)AV_PIX_FMT_YUV420P,///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 CrAV_PIX_FMT_YUYV422,///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)AV_PIX_FMT_YUV422P,///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1AV_PIX_FMT_UYVY422,///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)AV_PIX_FMT_YUV444P,///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)AV_PIX_FMT_YUV440P,///< packed RGB 8:8:8, 24bpp, RGBRGB...AV_PIX_FMT_RGB24,///< packed RGB 8:8:8, 24bpp, BGRBGR...AV_PIX_FMT_BGR24,///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...AV_PIX_FMT_ARGB,///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...AV_PIX_FMT_RGBA,///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...AV_PIX_FMT_ABGR,///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...AV_PIX_FMT_BGRA,///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endianAV_PIX_FMT_RGB565BE,///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endianAV_PIX_FMT_RGB565LE,///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefinedAV_PIX_FMT_RGB555BE,///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefinedAV_PIX_FMT_RGB555LE,///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endianAV_PIX_FMT_BGR565BE,///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endianAV_PIX_FMT_BGR565LE,///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefinedAV_PIX_FMT_BGR555BE,///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefinedAV_PIX_FMT_BGR555LE,}复制代码每个类型的注释开头要么是packed要么是planar,YUV 类型后跟着三个数字 4:2:0、4:2:2、4:4:4 等等,这些都表⽰什么?带着这些疑问,开始搜索资料研究学习 RGB 和 YUV 颜⾊空间相关和像素格式的概念。
YUV介绍⼯作中经常会使⽤⼀些颜⾊空间,最主要的就是使⽤RGB空间和YUV空间,把两空间的⼀些知识记录在此。
1. 什么是RGB?RGB是红绿蓝三原⾊的意思,R=Red、G=Green、B=Blue。
2.什么是YUV/YCbCr/YPbPr?亮度信号经常被称作Y,⾊度信号是由两个互相独⽴的信号组成。
视颜⾊系统和格式不同,两种⾊度信号经常被称作U和V或Pb和Pr或Cb和Cr。
这些都是由不同的编码格式所产⽣的,但是实际上,他们的概念基本相同。
在DVD中,⾊度信号被存储成Cb和Cr(C代表颜⾊,b代表蓝⾊,r代表红⾊)。
3.什么是4:4:4、4:2:2、4:2:0?在最近⼗年中,视频⼯程师发现⼈眼对⾊度的敏感程度要低于对亮度的敏感程度。
在⽣理学中,有⼀条规律,那就是⼈类视⽹膜上的视⽹膜杆细胞要多于视⽹膜锥细胞,说得通俗⼀些,视⽹膜杆细胞的作⽤就是识别亮度,⽽视⽹膜锥细胞的作⽤就是识别⾊度。
所以,你的眼睛对于亮和暗的分辨要⽐对颜⾊的分辨精细⼀些。
正是因为这个,在我们的视频存储中,没有必要存储全部颜⾊信号。
既然眼睛看不见,那为什么要浪费存储空间(或者说是⾦钱)来存储它们呢?像Beta或VHS之类的消费⽤录像带就得益于将录像带上的更多带宽留给⿊—⽩信号(被称作“亮度”),将稍少的带宽留给彩⾊信号(被称作“⾊度”)。
在MPEG2(也就是DVD使⽤的压缩格式)当中,Y、Cb、Cr信号是分开储存的(这就是为什么分量视频传输需要三条电缆)。
其中Y信号是⿊⽩信号,是以全分辨率存储的。
但是,由于⼈眼对于彩⾊信息的敏感度较低,⾊度信号并不是⽤全分辨率存储的。
⾊度信号分辨率最⾼的格式是4:4:4,也就是说,每4点Y采样,就有相对应的4点Cb和4点Cr。
换句话说,在这种格式中,⾊度信号的分辨率和亮度信号的分辨率是相同的。
这种格式主要应⽤在视频处理设备内部,避免画⾯质量在处理过程中降低。
当图像被存储到Master Tape,⽐如D1或者D5,的时候,颜⾊信号通常被削减为4:2:2。
视频与图像RGB/YUV格式详解作者:中华视频网计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。
这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。
根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。
F = r [ R ] + g [G ] + b [ B ]其中,r、g、b分别为三基色参与混合的系数。
当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光。
调整r、g、b三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。
那么YUV又从何而来呢?在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD 摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。
这种色彩的表示方法就是所谓的YUV色彩空间表示。
采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。
如果只有Y 信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。
彩色电视采用YUV 空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
YUV与RGB相互转换的公式如下(RGB取值范围均为0-255):Y = 0.299R + 0.587G + 0.114BU = -0.147R - 0.289G + 0.436BV = 0.615R - 0.515G - 0.100BR = Y + 1.14VG = Y - 0.39U - 0.58VB = Y + 2.03U在DirectShow中,常见的RGB格式有RGB1、RGB4、RGB8、RGB565、RGB555、RGB24、RGB32、ARGB32等;常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。
作为视频媒体类型的辅助说明类型(Subtype),它们对应的GUID见表2.3。
表2.3 常见的RGB和YUV格式GUID 格式描述MEDIASUBTYPE_RGB1 2色,每个像素用1位表示,需要调色板MEDIASUBTYPE_RGB4 16色,每个像素用4位表示,需要调色板MEDIASUBTYPE_RGB8 256色,每个像素用8位表示,需要调色板MEDIASUBTYPE_RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位MEDIASUBTYPE_RGB555 每个像素用16位表示,RGB分量都使用5位(剩下的1位不用)MEDIASUBTYPE_RGB24 每个像素用24位表示,RGB分量各使用8位MEDIASUBTYPE_RGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位不用)MEDIASUBTYPE_ARGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)MEDIASUBTYPE_YUY2 YUY2格式,以4:2:2方式打包MEDIASUBTYPE_YUYV YUYV格式(实际格式与YUY2相同)MEDIASUBTYPE_YVYU YVYU格式,以4:2:2方式打包MEDIASUBTYPE_UYVY UYVY格式,以4:2:2方式打包MEDIASUBTYPE_AYUV 带Alpha通道的4:4:4 YUV格式MEDIASUBTYPE_Y41P Y41P格式,以4:1:1方式打包MEDIASUBTYPE_Y411 Y411格式(实际格式与Y41P相同)MEDIASUBTYPE_Y211 Y211格式MEDIASUBTYPE_IF09 IF09格式MEDIASUBTYPE_IYUV IYUV格式MEDIASUBTYPE_YV12 YV12格式MEDIASUBTYPE_YVU9 YVU9格式下面分别介绍各种RGB格式。
¨ RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。
它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。
以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF (白色),那么图像数据001101010111…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。
¨ RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。
程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。
当读出一个像素后,这个字的各个位意义如下:高字节低字节R R R R R G G G G G G B B B B B可以组合使用屏蔽字和移位操作来得到RGB各分量的值:#define RGB565_MASK_RED 0xF800#define RGB565_MASK_GREEN 0x07E0#define RGB565_MASK_BLUE 0x001FR = (wPixel & RGB565_MASK_RED) >> 11; // 取值范围0-31G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值范围0-63B = wPixel & RGB565_MASK_BLUE; // 取值范围0-31¨ RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。
使用一个字读出一个像素后,这个字的各个位意义如下:高字节低字节X R R R R G G G G G B B B B B (X表示不用,可以忽略)可以组合使用屏蔽字和移位操作来得到RGB各分量的值:#define RGB555_MASK_RED 0x7C00#define RGB555_MASK_GREEN 0x03E0#define RGB555_MASK_BLUE 0x001FR = (wPixel & RGB555_MASK_RED) >> 10; // 取值范围0-31G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值范围0-31B = wPixel & RGB555_MASK_BLUE; // 取值范围0-31¨ RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。
注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。
通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:typedef struct tagRGBTRIPLE {BYTE rgbtBlue; // 蓝色分量BYTE rgbtGreen; // 绿色分量BYTE rgbtRed; // 红色分量} RGBTRIPLE;¨ RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。
(ARGB32就是带Alpha通道的RGB32。
)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。
通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:typedef struct tagRGBQUAD {BYTE rgbBlue; // 蓝色分量BYTE rgbGreen; // 绿色分量BYTE rgbRed; // 红色分量BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)} RGBQUAD;下面介绍各种YUV格式。
YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。
前者将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。
表2.3中的YUY2到Y211都是打包格式,而IF09到YVU9都是平面格式。
(注意:在介绍各种具体格式时,YUV各分量都会带有下标,如Y0、U0、V0表示第一个像素的YUV分量,Y1、U1、V1表示第二个像素的YUV分量,以此类推。
)¨ YUY2(和YUYV)格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次。
一个宏像素为4个字节,实际表示2个像素。
(4:2:2的意思为一个宏像素中有4个Y分量、2个U分量和2个V分量。
)图像数据中YUV分量排列顺序如下:Y0 U0 Y1 V0 Y2 U2 Y3 V2 …¨ YVYU格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:Y0 V0 Y1 U0 Y2 V2 Y3 U2 …¨ UYVY格式跟YUY2类似,只是图像数据中YUV分量的排列顺序有所不同:U0 Y0 V0 Y1 U2 Y2 V2 Y3 …¨ AYUV格式带有一个Alpha通道,并且为每个像素都提取YUV分量,图像数据格式如下:A0 Y0 U0 V0 A1 Y1 U1 V1 …¨ Y41P(和Y411)格式为每个像素保留Y分量,而UV分量在水平方向上每4个像素采样一次。
一个宏像素为12个字节,实际表示8个像素。
图像数据中YUV分量排列顺序如下:U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …¨ Y211格式在水平方向上Y分量每2个像素采样一次,而UV分量每4个像素采样一次。
一个宏像素为4个字节,实际表示4个像素。
图像数据中YUV分量排列顺序如下:Y0 U0 Y2 V0 Y4 U4 Y6 V4 …¨ YVU9格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个4 x 4的宏块,然后每个宏块提取一个U分量和一个V分量。
图像数据存储时,首先是整幅图像的Y分量数组,然后就跟着U分量数组,以及V分量数组。
IF09格式与YVU9类似。
¨ IYUV格式为每个像素都提取Y分量,而在UV分量的提取时,首先将图像分成若干个2 x 2的宏块,然后每个宏块提取一个U分量和一个V分量。