===========大小=============
一般,直接采集到的视频数据是RGB24的格式
RGB24一帧的大小size=width×heigth×3 Byte,
RGB32的size=width×heigth×4
I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Byte。
X264在进行编码的时候需要标准的YUV(4:2:0)
==============================
YV12虽然也是(4:2:0)但是YV12和I420的却是不同的,在存储空间上面有些区别:UV的顺序不同
YV12 : 亮度(行×列) + V(行×列/4) + U(行×列/4)
I420 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP
YV12和I420的区别:
yuv420p是I420格式,它的图如下所示:
其中前w*h Byte存储Y,接着的w*h*1/4 Byte存储U,最后w*h*1/4 Byte存储V
注意上图中的yuv颜色对应关系,4个Y对应一组uv
======================================
ffmpeg中像素格式名称后面有“P”的,代表是planar格式(如AV_PIX_FMT_YUV420P),否则就是packed格式。
AV_PIX_FMT_YUV420P,    ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)   = 0
AV_PIX_FMT_NV12,      ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)  
AV_PIX_FMT_NV21,      ///< as above, but U and V bytes are swapped  
注:
420p是先把U存放完后,再存放V,也就是说UV它们是连续的。而420P像素数据一共占用w*h*3 Byte的数据。其中前w*h Byte存储Y,接着的w*h Byte存储U,最后w*h Byte存储V。
  1. fread(pic,1,w*h*3,fp);  //全部读出
  2. //Y
  3. fwrite(pic,1,w*h,fp1);
  4. //U
  5. fwrite(pic+w*h,1,w*h,fp2);
  6. //V
  7. fwrite(pic+w*h*2,1,w*h,fp3);
会把一张分辨率为256x256的文件分离成为三个文件:
纯Y数据,分辨率为256x256。
纯U数据,分辨率为256x256。
纯V数据,分辨率为256x256。
PSNR取值通常情况下都在20-50的范围内,取值越高,代表两张图像越接近,反映出受损图像质量越好。
3,分离RGB24像素数据中的R、G、B分量
与YUV420P三个分量分开存储不同,RGB24格式的每个像素的三个分量是连续存储的。一共占用w*h*3 Byte的存储空间。RGB24格式规定首先存储第一个像素的R、G、B,然后存储第二个像素的R、G、B…以此类推。这种存储方式称为Packed方式。
fread(pic,1,w*h*3,fp); 
  1. for(int j=0;j<w*h*3;j=j+3){
  2. //R
  3. fwrite(pic+j,1,1,fp1);
  4. //G
  5. fwrite(pic+j+1,1,1,fp2);
  6. //B
  7. fwrite(pic+j+2,1,1,fp3);
  8. }
4,将RGB24格式像素数据转换为YUV420P格式像素数据
RGB到YUV的转换公式:
Y= 0.299*R+0.587*G+0.114*B
U=-0.147*R-0.289*G+0.463*B
V= 0.615*R-0.515*G-0.100*B
参考:

yuv rgb 像素格式1的更多相关文章

  1. 最简单的视音频播放示例2:GDI播放YUV, RGB

    前一篇文章对“Simplest Media Play”工程作了概括性介绍.后续几篇文章打算详细介绍每个子工程中的几种技术.在记录Direct3D,OpenGL这两种相对复杂的技术之前,打算先记录一种和 ...

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

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

  3. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  4. 80.YCrCb - YUV - RGB之间的介绍

    一,引言 YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL).YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视.与RGB视频信号传输相比,它最大的优点在于只需 ...

  5. 图像处理之基础---yuv420及其rgb,bayer, yuv, RGB的相互转换详解

    YUV格式解析1(播放器——project2) 根据板卡api设计实现yuv420格式的视频播放器 打开*.mp4;*.264类型的文件,实现其播放. 使用的视频格式是YUV420格式   YUV格式 ...

  6. YUV/RGB与H264之间的编解码

    1.源码下载 http://download.videolan.org/x264/snapshots/ 2.编译 ./configure --prefix=./_install --enable-sh ...

  7. .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。

    在.net下,如果你加载了一副8位的灰度图像,然后想向其中绘制一些线条.或者填充一些矩形.椭圆等,都需要通过Grahpics.FromImage创建Grahphics对象,而此时会出现:无法从带有索引 ...

  8. YUV RGB播放器 打开, 显示RGB数据

    可以查看RGB像素数据 可以通过菜单栏打开像素数据文件,也可以通过拖拽方式打开文件.如果文件名称中包含了“{w}x{h}”这样的字符串(例如“test_320x420.yuv”),系统会自动解析为该像 ...

  9. YUV与像素值之间的关系

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

随机推荐

  1. zstu.4189: 逻辑运算(构建 && 前缀表达式入门)

    4189: 逻辑运算 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 274  Solved: 42 Description 还记得大学里学过的模电么, ...

  2. Crashing Robots(imitate)

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8124   Accepted: 3528 D ...

  3. Summarize Series For Burying My College

    Summarize  Series  For  Burying  My  College                                             For  Grade ...

  4. zabbix再爆高危SQL注入漏洞,可获系统权限

    漏洞概述 zabbix是一个开源的企业级性能监控解决方案.近日,zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统 ...

  5. UIWebView

    本地html string文件 loadHTMLString: 本地/远程文件 loadRequest

  6. [BZOJ1941][Sdoi2010]Hide and Seek

    [BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...

  7. php增加对mysqli的支持

    php增加对mysqli的支持   我在fedora下使用yum安装的php和mysql,但是发现php不支持myslqi,只能编译一个mysqli的扩展给php用了. 方法如下: 1.下载php 2 ...

  8. MVC 详细说明

    .NET MVC执行过程: 1.网址路由比对 2.执行Controller与Action 3.执行View并返回结果 在使用MVC中是由IgnoreRoute()辅助方法对比成功的,会导致程序直接跳离 ...

  9. Android 中获得notification的发出时间

    最近做程序时,有一个类似闹钟的功能,用notification唤醒程序后,希望能得到发出这个notification时的具体时间,就是notification右边写着的那个时间.查了notificat ...

  10. Java for LeetCode 072 Edit Distance【HARD】

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...