YUV格式像素

转自:http://blog.csdn.net/grow_mature/article/details/9004548

 

一幅彩色图像的基本要素是什么?

说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少。一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147200(十进制),也就是3.95M大小。这个大小跟多少个像素点和数据的存储格式有关。下面简述yuv与像素的关系:

 

YUV与像素的关系:

YUV是利用一个亮度(Y)、两个色差(U,V)来代替传统的RGB三原色来压缩图像。传统的RGB三原色使用红绿蓝三原色表示一个像素,每种原色占用一个字节(8bit),因此一个像素用RGB表示则需要8*3=24bit。如果使用YUV表示这个像素,假设YUV的采样率为:4:2:0,即每一个像素对于亮度Y的采样频率为1,对于色差U和V,则是每相邻的两个像素各取一个U和V。对于单个的像素来说,色差U和V的采样频率为亮度的一半。如有三个相邻的像素,如果用RGB三原色表示,则共需要占用:8*3*3=72bits;如果采用YUV(4:2:0)表示,则只需要占用:8*3(Y)+ 8*3*0.5(U)+8*3*0.5(V)= 36bits。只需原来一半的空间,就可以表示原来的图像,数据率压缩了一倍,而图像的效果基本没发生变化。

 

一般描述一幅图像的参数时我们会考虑以下几点:

1、宽:一行有多少个像素点。2、高:一列有多少个像素点。3、YUV格式还是RGB格式?4、一行多少个字节?5、图像大小是多少?6、图像的分辨率是多少?

 

以下对YUV422、YUV420和YUV444进行初步解析:

YUV422格式。

分为很多小类,按照U、V的排列可以有YUYV,YVYU,UYVY,VYUY四种,其中,YUYVY一般又称作yuv2格式。

而这四种YUV422格式,每种又可以分为2小类,按Y和UV的排列可以有打包格式和平面格式。例如,一个640×480×2的YUV文件,打包格式就是YUYVYUYV这样一直排列下去,平面格式就是先640×480个Y排列完,然后是640×240个U,然后是640×240个V这样排列,如下

图:

 

假如有一幅640×480的图片,用yuv422来表示,那么,采样方式就是每个像素采样Y信号,U,V信号隔一个采样,这样算下来,就有640×480个Y,640×240个U,640×240个V,一幅640×480大小的YUV图片占的总字节数为640×480×2个字节,每像素2个字节,也就是16位。

在内存种中这样排列:Y0U0Y1V0 Y2U1Y3V1...

第一个像素的YUV值为:Y0 U0 V0

第二个像素的YUV值为: Y1 U0 V0

第三个像素的YUV值为: Y2 U1 V1

.....其他以此推类,也就是说每两个像素是共用了UV的;在一行上来看,每个像素的YUV值中Y值被采样,UV值采样0后,跳到3,然后5,所以每行上Y有640个,U,V各320个。

主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值), 每 2x2 个点保存一个 Cr 和Cb 值, 图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bit unsigned) 模型, 4 个点需要 8x3=24 bites(如下图第一个图). 而现在仅需要 8+(8/4)+(8/4)=12bites, 平均每个点占12bites,这样就把图像的数据压缩了一半。

以上仅给出了理论上的示例,在实际数据存储中是有可能是不同的,下面给出几种具体的存储形式:

(1) YUV 4:4:4

YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2) YUV 4:2:2

每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存(亮度2个字节,两个色度各1个字节)。

下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3

映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

(3) YUV 4:1:1

4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存(亮度4个字节,两个色度各1个字节)。

下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 Y1 Y2 V2 Y3

映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

(4)YUV4:2:0

4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量, 也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是 2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存(亮度4个字节,两个色度各1个字节)。

下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2][Y3 U3 V3]

[Y5U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的码流为:Y0 U0 Y1 Y2 U2 Y3

Y5V5 Y6 Y7 V7 Y8

映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

[Y5U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

(资料均来源于互联网,侵权请声明,谢谢)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql c语言教程,C语言调用mysql快速教程(精华篇).pdf

C语言调用mysql快速教程(精华篇).pdf,使用 语言操作 之前,先在 里头创建一个数据库,一个表,在表里头添加1 c mysql mysql数据如下:创建数据库,库名为 cusemysql:mysql create database cusemysql;创建表 表…

perl学习之:编译、执行与内存关系(转)

1、所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的 常量),它们所需要的空间大小可以明确计算出来,并且不会再改变,因…

生命游戏c语言代码easy,c++生命游戏源码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼glViewport( 0, 0, width, height );glMatrixMode( GL_PROJECTION );glLoadIdentity( );}//程序入口int main(int argc, char *argv[]){//随机生成细胞的状态MapRand();std::cout<//SDL初始化const SDL_VideoInfo* info NULL;i…

从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight

线性布局中&#xff0c;有 4 个及其重要的参数&#xff0c;直接决定元素的布局和位置&#xff0c;这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity &#xff08;是本元素所有子元素的重力方向&#xff09; android:orientation &…

Thread详解

具体可参考&#xff1a;Java并发编程&#xff1a;Thread类的使用&#xff0c;这里对线程状态的转换及主要函数做一下补充。 一. 线程状态转换图 注意&#xff1a; 调用obj.wait()的线程需要先获取obj的monitor&#xff0c;wait()会释放obj的monitor并进入等待态。所以wait()/no…

mac怎么用终端编写c语言视频,【新手提问】有知道用mac终端编c语言的网络编程的人吗?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#include#include#include#include#define ECHOMAX 255int main(int argc,char *argv[]){ int sock;struct sockaddr_in echoServAddr;struct sockaddr_in echoClntAddr;unsigned short echoServPort;unsigned int…

Net框架下-ORM框架LLBLGen的简介(转载)

Net框架下-ORM框架LLBLGen的简介 http://www.cnblogs.com/huashanlin/archive/2015/02/12/4288522.html 官方网址&#xff1a;http://www.llblgen.com/转载于:https://www.cnblogs.com/wangjunwei/p/4290896.html

加强团队凝聚力建设方面采取的方法

加强团队凝聚力建设方面采取的方法主要有&#xff1a;1. 项目经理定期和团队成员进行单独沟通&#xff0c;了解成员对工作和个人职业发展的一些真实想法&#xff0c;使团队发展和个人发展两者相互促进&#xff0c;让团队成员感受到在做研发过程中个人技能的提高和个人成就感的增…

c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)

线性表的定义线性表&#xff1a;是最常用且最简单的一种数据结构&#xff0c;它是一种线性数据结构&#xff0c;是由类型相同的n个(n≥0)数据元素组成的有序序列。线性表的特点&#xff1a;有且只有一个被称作“第一个”的数据元素&#xff0c;有且只有一个被称为“最后一个”的…

uva 10716 Evil Straw Warts Live

没有看明白这标题配图和题目有什么关系&#xff0c;好像这是一张专辑的名字。先要考虑有多少个字母总数是奇数&#xff0c;超过1个就直接输出impossible。每一次考虑两端点情况&#xff0c;如果字母不同&#xff0c;再进行搜索&#xff0c;换那个字母交换次数比较少&#xff0c…

嵌入式 boa服务器移植

随着Internet技术的兴起&#xff0c;在嵌入式设备的管理与交互中&#xff0c;基于Web方式的应用成为目前的主流&#xff0c;这种程序结构也就是大家非常熟悉的B/S结构&#xff0c;即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器&#xff0c;能够生成动态页面&#xff0…

linux 欢迎语,一日一技 | 如何让你的终端欢迎语好看又有趣

原标题&#xff1a;一日一技 | 如何让你的终端欢迎语好看又有趣Matrix 精选Matrix 是少数派的写作社区&#xff0c;我们主张分享真实的产品体验&#xff0c;有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章&#xff0c;展示来自用户的最真实的体验和观点。文章代…

springmvc 1

springmvc的model是实体类&#xff0c;可以理解为把数据库里的一张表变成了一个对象 /*** */ package com.test.model;/*** ClassName: User.java* Description: TODO(用一句话描述该文件做什么) * * author JerryZhou* Date 2014-7-15 上午10:24:04 *…

android java adb命令大全,Android adb命令备份恢复手机信息

假设你已经在Windows下安装了Android SDK&#xff0c;并且更新到最新版步骤&#xff1a;1.通过USB连接你的设备&#xff0c;打开命令行2.一般地&#xff0c;输入”adb devices“检测设备是否连接正常有个命令“ adb backup”(简化写法)可以使你备份整个系统。这个命令的参数如下…

【HDOJ】【3037】Saving Beans

排列组合 啊……这题是要求c(n-1,0)c(n,1)c(n1,2)......c(nm-1,m) 这个玩意……其实就等于c(nm,m) 好吧然后就是模P……Lucas大法好 我SB地去预处理<P的所有fac和inv了……果断TLE 事实上Lucas时对于<P的部分直接暴力算就好了 1 //HDOJ 30372 #include<cstdio>3 #…

php远程下载文件

<?php /* 本源码来源于网络 http://user.qzone.qq.com/292672703 */ header("content-Type: text/html; charsetutf-8"); //定义编码 set_time_limit (0);//不限时 24 * 60 * 60 //语言包数组 $lang_cn array (0 > 文件地址,1 > 输入密码,2 > 下载耗…

linux 下安装部署mq,RocketMQ在linux下安装部署

本博客以当前RocketMQ最新版介绍&#xff1a;v4.4.0环境要求64位JDK 1.8;Maven 3.2.x; // 源码编译时需要用到二进制文件安装> unzip rocketmq-all-4.4.0-bin-release.zip && mv rocketmq-all-4.4.0-bin-release rocketmq启动server> cd /root/rocketmq> nohu…

一个典型的参数型跨站脚本漏洞

拿百度主页曾经的一个XSS做个演示&#xff0c;这个漏洞是由于百度主页tn和bar参数过滤不严导致的参数型XSS&#xff1a;http://www.baidu.com/index.php?tn"/**/stylexss:expression(alert(‘xss‘)); http://www.baidu.com/index.php?bar"/**/stylexss:expressio…

java 常用工具类的使用一

1. Java工具概述 很多人初学程序时&#xff0c;总是在想&#xff0c;那么多的算法该怎么写呀&#xff1f;那么多的数据结构都不熟悉&#xff0c;该怎么实现呀&#xff1f;总是担心英语不好程序学不精通&#xff0c;数学不好写程序无法达到巅峰。学的程序越多&#xff0c;不懂的…

android http最新框架,Android框架学习笔记02AndroidAsycHttp框架

上一篇中我们介绍了OkHttp3.0框架的基本使用方法&#xff0c;这一篇我们学习一下Android的另外一个网络请求框架——AsyncHttpClient框架。Asynchttpclient框架是一个开源的异步网络请求框架&#xff0c;所有的网络都在Android的非UI线程中&#xff0c;通过回调方法处理请求结果…