图像基础知识之YUV

图像基础知识之YUV一、YUV常用格式YUV是编译true-color颜色空间(colorspace)的种类,Y'UV,YUV,YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮

大家好,又见面了,我是你们的朋友全栈君。

 一、YUV常用格式

  YUV是编译true-color颜色空间(color space)的种类,Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度与浓度(Chrominance、Chroma)

  YUV格式有两大类:packedplanar。注:planar还分平面存储平面打包格式。

  • 对于packed的YUV格式,每个像素点的Y,U,V是连续交错存储的。
  • 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,然后是所有像素点的V(平面存储格式),或者 紧接着UV交错存储(平面打包格式)。

  常用的CODEC格式-planar,如图:
<span role="heading" aria-level="2">图像基础知识之YUV<span role="heading" aria-level="2">图像基础知识之YUV

                                  YV12

   

   <span role="heading" aria-level="2">图像基础知识之YUV  <span role="heading" aria-level="2">图像基础知识之YUV

                              NV12

                               

    W即图像的宽度,H即图像的高度,Stride表示图像行的跨度,超出W部分为填充数据,主要目的是为了字节对齐,一般以16字节或者或者32字节对齐居多。

    从左侧数据存储结构图看出高度(H)是分层次的,YV12三层和NV12两层,这个层次结构称为 Plane,即YV12在代码中用 Plane[0]表示Y数据的起始地址,Plane[1]表示V数据的起始地址,Plane[1]表示U数据的起始地址。
    而NV12的UV是在一个Plane中交错存放,因此用两个Plane表示即可。

    从右侧的数据排布图可见YV12和NV12都是YUV 4:2:0采样,每四个Y共用一组UV分量,已用颜色标明Y1、Y2、Y7、Y8共用U1、V1,并且在内存中连续排布。

 

二、YUV拓展知识

    YUV格式主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。
  用三个图来直观地表示采集的方式,黑点表示采样该像素点的Y分量,以空心圆圈表示采样该像素点的UV分量:

   <span role="heading" aria-level="2">图像基础知识之YUV

    YUV 4:4:4采样,每一个Y对应一组UV分量。
    YUV 4:2:2采样,每两个Y共用一组UV分量。
    YUV 4:2:0采样,每四个Y共用一组UV分量。

 

(1) YUVY 格式 (属于YUV422)

  <span role="heading" aria-level="2">图像基础知识之YUV
  YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y’00、Y’01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。

 
(2) UYVY 格式 (属于YUV422)
 
<span role="heading" aria-level="2">图像基础知识之YUV

  UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。
 
(3) YUV422P(属于YUV422)
 
<span role="heading" aria-level="2">图像基础知识之YUV
 
YUV422P也属于YUV422的一种,它是一种Plane模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y’00、Y’01 而言,其Cb、Cr的值均为 Cb00、Cr00。
 
(4)YV12,YU12格式(属于YUV420)
<span role="heading" aria-level="2">图像基础知识之YUV

YU12和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。注意,上图中,Y’00、Y’01、Y’10、Y’11共用Cr00、Cb00,其他依次类推。

(5)NV12、NV21(属于YUV420)

<span role="heading" aria-level="2">图像基础知识之YUV

NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y’00、Y’01、Y’10、Y’11共用Cr00、Cb00

 

注:

YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
I420: YYYYYYYY UU VV    =>YUV420P
YV12: YYYYYYYY VV UU    =>YUV420P
NV12: YYYYYYYY UVUV     =>YUV420SP
NV21: YYYYYYYY VUVU     =>YUV420SP

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154698.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月1日 下午1:00
下一篇 2022年7月1日 下午1:00


相关推荐

  • ffplay播放器移植VC的工程:ffplay for MFC

    ffplay播放器移植VC的工程:ffplay for MFCffplay播放器移植VC的工程:ffplayforMFC本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayforMFC。本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继

    2022年6月24日
    21
  • pycharm基础使用方法

    pycharm基础使用方法nbsp 0 前言 nbsp Pycharm nbsp 作为一款针对 nbsp Python nbsp 的编辑器 配置简单 功能强大 使用起来省时省心 对初学者友好 这也是为什么编程教室一直推荐新手使用 nbsp Pycharm nbsp 的原因 本文我们将介绍 nbsp pycharm nbsp 编辑器的基本使用方法 主要包括以下几个方面 下载安装 新建项目流程 配置 nbsp Pycharm Python 控制台 其他参考资料

    2026年3月27日
    1
  • python面试常问问题_面试的十个问题及回答

    python面试常问问题_面试的十个问题及回答整理了关于人工智能pytorch、python基础、图像处理opencv/自然语言处理、机器学习、数学基础等工具型资料,对于想学习人工智能或者转行到高薪行业的打工人或大学生都非常实用,无任何套路免费提供,进群966367816免费领取哦~1、到底什么是Python?你可以在回答中与其他技术进行对比下面是一些关键点:Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。Python是动态类型语言,指的是你在声明变

    2022年8月30日
    4
  • 最新PyCharm2018激活成功教程教程

    最新PyCharm2018激活成功教程教程问题 pycharm 用了一段时间总是提示过期 很烦 这里分享长期有效方法方法如下 1 下载一个 jar 包 地址点击打开百度云 nbsp 或者点击打开百度云 2 密码 oxjj2 把下载好的 jar 包放到 pycharm 安装目录的 bin 目录下 3 接着找到 bin 目录下的两个文件 分别是 pycharm exe vmoptions 和 pycharm64 exe vmoptions nbsp nbsp nbsp nbsp nbsp 在两个文件的末尾加

    2026年3月18日
    1
  • sql多层嵌套查询优化_sql嵌套查询返回多个字段

    sql多层嵌套查询优化_sql嵌套查询返回多个字段1.嵌套查询优化优化前SELECTq.id,q.title,q.question,q.person_name,q.department_name,r.response,r.create_timeresponse_timeFROMtb_ent_questionqLEFTJOINtb_ent_res

    2022年8月10日
    13
  • 不允许对虚拟列执行 UPDATE 操作

    不允许对虚拟列执行 UPDATE 操作

    2020年11月9日
    576

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号