一、图像基础概念

像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英语单词“元素element",就得到了"pixel",简称px,所以“像素”有‘图像元素”之意。

分辨率:是指图像的大小或尺寸。 比如1920x1080。

位深:是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深来表示的。比如红色分量用8bit。

帧率:在1秒钟时间里传输 的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。比如25fps表示一秒有25张图片。

码率:视频文件在单位时间内使用的数据流量。比如1Mbps。

Stride:指在内存中每行像素所占的空间。为了实现内存对齐每行像素在内存中所占的空间并不一定是图像的宽度。

1.1 像素

像素是一个图片的基本单位,pix是英语单词picture的简写,加上英语单词“元素element",就得到了"pixel",简称px,所以“像素”有‘图像元素”之意。

例如2500x 2000的照片就是指横向有2500个像素点,竖向有2000个像素点,总共是500万个像素,也俗称500万像素照片

1.2 分辨率

图像(或视频)的分辨率是指图像的大小或尺寸。我们通常用像素表示图像的尺寸。

例如2500x 2000的照片就是指横向(宽)有250@个像素点,竖向(高)有2000个像素点。

常见的分辨率:

360P(640x360)、 720P(1280x720)、 1080P(1920x1080)、 4K(3840x2160)、 8K(7680x4320)

1.2 分辨率-不同分辨率之间的区别

常说的1080和720其实是指垂直像素数,分辨率除去垂直像素,还需要考虑到水平像素数。按照16:9 (宽:高)的比例计算,720p的水平像素数为720/9*16 = 1280,总计像素为921600像素即大约为92万像素。1080p具有1920个水平像素,总计2073600.像素即约200万像素,是720p的两倍多。

像素越多视频就越清晰,所以1080p比720p的视频更加清晰。图像的分辨率越高,图像就越清晰

1.3 位深

我们看到的彩色图片,都有三个通道,分别为红(R)、绿(G)、蓝(B)通道。(如果需要透明度则还有alpha分量)

通常每个通道用8bit表示,8bit能表示2^8=256种颜色, 所以可以组成256 * 256 * 256=16777216= 1677万种颜色。

这里的8bit就是我们讲的位深。

每个通道的位深越大,能够表示的颜色值就越大,比如现在高端电视说的10bit色彩,即是每个通道用10bit表示,每个通道有2^10=1024种颜色。1024* 1024*1024约为107374万色=10亿色,是8bit的64倍 。

常见的颜色还是8bit居多。

1.4 帧率

帧率即FPS (每秒有多少帧画面),经常玩游戏的同学应该会对这个词很熟悉。我们玩游戏时,FPS 帧率越高就代表游戏画面越流畅,越低则越卡顿。视频也是如此。

由于视觉图像在视网膜的暂时停留,一般图像帧率能达到24帧,我们就认为图像是连续动态的。

电影帧率-般是24fps (帧每秒) ; .

电视剧一般是25fps;

监控行业常用25fps;

音视频通话常用15fps;

帧率越高,画面越流畅,需要的设备性能也越高。

1.4 码率

  • 视频文件 在单位时间内使用的数据流量。比如1Mbps。

  • 大多数情况下码率越高分辨率越高,也就越清晰。 但模糊的视频文件大小 (码率)也可以很大,分辨率小的视频文件可能也比分辨率大的视频文件清晰。

  • 对于同一个原始图像源的时候,同样的编码算法,则码率越高,图像的失真就会越小,视频画面就会越清晰

二、YUV/RGB深入理解

2.1 RGB

我们前面已经讲过RGB色彩表示,这里我们重点讲RGB的排列。通常的图像像素是按RGB顺序进行排列,但有些图像处理要转成其他顺序,比如OpenCV经常转成BGR的排列方式。

2.2 YUV

2.2.1 YUV介绍

  • 与我们熟知RGB类似,YUV也是一种颜色编码方法,它是指将亮度参量(Y: Luminance或Luma)和色度参量(UV: Chrominance或Chroma) 分开进行表示的像素编码格式。

  • 这样分开的好处就是不但可以避免相互干扰,没有UV信息一样可以显示完整的图像,因而解决了彩色电视与黑白电视的兼容问题;还可以降低色度的采样率而不会对图像质量影响太大,降低了视屏信号传输时对频宽(带宽)的要求。

可以使用海康YUV播放器来播放YUV文件,海康YUV播放器下载地址



2.2.2 YUV格式

  • YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式:

    • 打包(packed) 格式:将每个像素点的Y、U、V分量交叉排列并以像素点为单元连续的存放在同一数组中,通常几个相邻的像素组成-一个宏像素(macro- pixel)
    • 平面(planar) 格式:使用三个数组分开连续的存放Y、U、V三个分量,即Y、U、V分别存放在各自的数组中。
  • libyuv,Google开源的实现各种YUV与RGB间相互转换、旋转、缩放的库。

2.2.3 YUV采样表示法

YUV采用A:B:C表示法来描述Y,U,V采样频率比例,下图中黑点表示采样像素点Y分量,空心圆表示采样像素点的UV分量。主要分为YUV 4:4:4、YUV 4:2:2、 YUV 4:2:0这几种常用的类型

  • 4:4:4表示色度频道没有下采样,即一个Y分量对应着-个U分量和一个V分量
  • 4:2:2表示2:1的水平下采样,没有垂直下采样,即每两个Y分量共用- - 个U分量和一个V分量
  • 4:2:0表示2:1的水平下采样,2:1 的垂直下采样,即每四个Y分量共用一个U分量和一个V分量

2.2.4 YUV数据存储

  • 下面以每个分量数据存储在一 -个char (或byte) 中为例描述YUV的数据存储方式。

    1. 4:4:4格式
    2. 4:2:2格式
    3. 4:2:0格式

2.2.4.1 YUV数据存储 - 4:4:4格式

  • 比如I444(YUV444)格式,对应Ffmpeg像素表示AV_ PIX_ FMT_YUV444P,///< planar YUV4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)

2.2.4.2 YUV数据存储 - 4:2:2格式

  • 比如I422(YUV422P)格式

    • 对应Ffmpeg像素 表示AV_ PIX_ FMT _YUV422P,///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
    • 该类型为planar格式

2.2.4.3 YUV数据存储 - 4:2:0格式 - YUV420P

  • 比如 I420(YUV420P) 格式

    • 对应Ffmpeg像素 表示AV_ PIX_ FMT _YUV42OP,///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
    • 该类型为planar格式
    • (4个Y + 1个U + 1个V)/4 = (4 + 1 +1)/4 = 1.5字节 = 12bpp

2.2.4.4 YUV数据存储 - 4:2:0格式 - NV12

  • 比如NV12格式

    • 对应Ffmpeg像素表示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)

2.2.4.5 YUV数据存储 - 4:2:0格式 - 参考

  • YUV420P:

    YV12:YYYYYYYY VV UU

    I420:YYYYYYYY UU VV
  • YUV420sp:

    NV12:YYYYYYYY UV UV

    NV21:YYYYYYYY VU VU

2.3 RGB和YUV的转换

  • 通常情况下RGB和YUV直接的相互转换都是调用接口实现,比如ffmpeg的swscale或者libyuv等库。

  • 主要转换标准是BT601和BT709。

    8bit位深的情况下

    • TV range是16-235(Y)、16-240(UV) ,也叫Limited Range
    • PC range是0-255, 也叫Full Range
    • 而RGB没有range之分,全是0-255
  • BT601 TV Range转换公式

    YUV(256级别)可以从8位RGB直接计算:

    Y= 0.299 * R + 0.587G + 0.114B;

    U= -0.169 * R - 0.331G + 0.5 B;

    V= 0.5 * R - 0.419
    G - 0.081
    B;

    反过来,RGB也可以直接从YUV (256级别)计算:

    R=Y+ 1.402 (Y-128)

    G= Y - 0.34414 (U-128) - 0.71414 (U-128)

    B=Y + 1.772 (V-128)

  • 从YUV转到RGB如果值小于0要取0,如果大于255要取255

2.3 RGB和YUV的转换 - 为社么解码出错显示绿屏

因为解码失败时YUV分量都填为0值,然后根据公式:

R= 1.402 * (-128)= -126.598

G = -0.34414(-128) - 0.71414(-128) = 44.04992 + 91 40992 = 135 .45984

B= 1.772 * (-128)= -126.228

RGB值范围为[0,255], 所以最终的值为:

R= 0

G= 135 .45984

B=0

此时只有G分量有值所以为绿色。

2.4 YUV Stride对齐问题

比如分辨率638x480的YUV420P图像,我们在内存处理的时候如果要以16字节对齐,则638不能被16整除,我们需要在每行尾部填充2个字节。就是640。此时该图片的Y stride为640字节。

图像基础概念与YUV/RGB深入理解的更多相关文章

  1. 图像基础知识之YUV

     一.YUV常用格式 YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠.“Y”表示明亮度(L ...

  2. spring基础概念AOP与动态代理理解

    一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

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

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

  4. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

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

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

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

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

  7. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

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

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

  9. 【转载】Apache Storm 官方文档 —— 基础概念

    [转载自https://yq.aliyun.com/articles/87510?t=t1] Storm 系统中包含以下几个基本概念: 拓扑(Topologies) 流(Streams) 数据源(Sp ...

  10. Android Multimedia框架总结(五)多媒体基础概念

    转载请把头部出处链接和尾部二维码一起转载,本文出自: http://blog.csdn.net/hejjunlin/article/details/52431887 上篇中介绍了MediaPlayer ...

随机推荐

  1. 今天才知道 Ping 命令的意义

    当ping一个域名的时候  可以知道这个域名的解析情况,也可以知道 当前电脑是否联通了 域名. 可以看到 diandaxia.com 的域名解析是 112.124.182.113 ,而www.dian ...

  2. spring前导知识-Tomcat、Maven等配置

    spring前导知识: 版本注意: 该博客所用的版本: tomcat version 9 (注意10有未知错误(个人测试)) Maven version3.6.3 (注意3.6.2未知错误) serv ...

  3. JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等

    壹 ❀ 引 在日常开发中,判断两个数组是否相等应该是较为常见的场景,因为常用,所以想着简单记录下.关于判断数组相等,这里我分为两种场景,第一种是数组完全相等,即数组元素相同且元素顺序一致:第二则为元素 ...

  4. 从零开始的微信小程序入门教程(三),有趣且好玩的数据绑定

    壹 ❀ 引 我在从零开始的微信小程序入门教程(二),初识WXML与WXSS一文中简单介绍了小程序组件与小程序样式相关概念,在了解这两者之后,其实我们已经可以搭建出简单的静态页面,与书写HTML页面一样 ...

  5. SpringCloud 注册中心Zookeeper实战

    介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  6. Spring源码之spring事务

    目录 Spring事务 事务自定义标签 自定义标签 解析标签 bean 的初始化 InfrastructureAdvisorAutoProxyCreator 获取增强方法 获取所有增强中内适用于当前方 ...

  7. SpringBoot整合EasyExcel实现Excel表格的导出功能

    前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 在后端管理系统的开发中,经常有导出当前表格数 ...

  8. 压测模式该怎么选?RunnerGo五大压测模式详解

    在做性能测试时需要根据性能需求配置不同的压测模式,如:阶梯模式.使用jmeter时我们需要安装插件来配置测试模式,RunnerGo内嵌了压测模式这一选项更方便使用,今天来看看RunnerGo的几种压测 ...

  9. React 组件通信方式

    人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯. 1. 父子组件通信方式 1.1 父组件传递到子组件 直接通过属性进行传递,数据的传递可以提高组 ...

  10. web模块化

    CommonJS-----是一种后端js规范,是nodejs遵循的一种编写js模块的规范引入模块-------require('模块路径')定义模块 ------ exports.模块名= funct ...