一、参考资料

对于YUV420sp格式图像的copy and paste

RGB 与YUV颜色模型及存储格式

二、相关介绍

2.1 问题引入

OpenCV中如果是单通道或者三通道一样的大的图像,直接使用 copyTo()函数即可。对于yuv420的图像则不是适用。

2.2 色彩空间

定义色彩空间时,通常使用 CIELAB 或者 CIEXYZ 色彩空间作为参考标准。这两个色彩空间在设计时便要求包含普通人眼可见的所有颜色。

由于“色彩空间”有着固定的色彩模型映射函数组合,非正式场合下,色彩空间也被用来指代色彩模型,这样的用法严格意义上是错误的。

三、RGB色彩空间

RGB色彩空间中的一种颜色是由红、绿、蓝光构成。由R、G、B三个分量组成。RGB颜色分量是跟设备相关的,不论是采集还是显示。

摄像头采集中,每个像素的颜色分量不仅取决于场景的颜色和光照,还取决于测量红、绿蓝分量的滤波器的光谱效应。

屏幕显示中,实际显示出来的颜色取决于显示器中红、绿、蓝光源的光谱。(所以,根据所使用的波长不同,可以有许多不同的RGB色彩空间。)

标准的RGB是24bit的,即每个分量8bit。考虑到带宽限制,也有16bit的RGB,R和B用5bit表示,G用6bit表示(因为人眼对绿色更敏感)。从16bit转到24bitRGB,不是添加0,而是添加2位(G)或3位(R、B)最高有效位。

常见的RGB格式有RGB888,RGB565,RGB555,RGB24,RGB32(每个分量8比特,剩余8位空着),ARGB32(每个分量8比特,Alpha通道值8bit)等。

  • RGB的存储格式通常为BGRBGRBGR的顺序。
  • Bitmap就是在RGB像素数据上加上数据头形成的文件格式。

sRGB

为了克服RGB 的设备依赖性,人们又定义了一种不依赖上设备的sRGB,添加了光强与颜色分量数值之间的分线性γ映射。从RGB转换到sRGB,就是在色彩向量上乘以一个设备相关的红、绿、蓝光谱特性的3x3矩阵。这个变换由标定决定。

四、YUV

YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL,Phase Alternation Line)。(YIQ用于NTSC彩色电视制式,YUV用于PAL制和SECAM彩色电视制式,而YCrCb用于计算机用的显示器。)

Y代表亮度(Luma,Luminance),也即灰度值;UV代表色度(Chroma,Chrominance),作用是描述影像色彩饱和度,用于指定像素的颜色。YUV完全由RGB推导而来,亮度分量Y是RGB分量的组合,颜色分量由差分B-Y,R-Y提供。

严格来说,YUV是一种模拟表示,相应的数字表示为YCbCr。

4.1 YUV与YCbCr

一般人们所讲的YUV大多是指YCbCr。对于YCbCr,其中Y与YUV 中的Y含义一致,Cb , Cr 同样都指色彩,,只是在表示方法上有所不同,Cb、Cr 就是本来理论上的“分量/色差”的标识。C代表分量(是component的缩写)Cr、Cb分别对应r(红)、b(蓝)分量信号,Y除了g(绿)分量信号,还叠加了亮度信号。

4.2 RGB与YUV互相转换

4.3 YCrCb与YCbCr

YCrCb颜色空间是由YUV颜色空间派生的一种颜色空间。YCbCr是在世界数字组织视频标准研制过程中作为ITU-R BT.601建议的一部分,其实是YUV经过缩放和偏移的翻版。YCrCb中的Y与YUV中的Y含义一致,Cb、Cr同样都指色彩,只是在表示方法上不同。在YUV家族中,YCbCr是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。

4.4 YUV特点

  • YUV一种颜色编码方法,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样 可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容性问题
  • YUV不像RGB那样要求三个独立的视频信号同时传 输,所以用YUV方式传送占用极少的频宽

4.5 YUV(YCbCr)优点

  • 减少通道之间的相关性。可以方便的对色彩进行阈值处理
  • 简化了彩色图像的增强,例如对比度增强只需要在图像的Y分量上执行;
  • 可以对亮度和色彩进行不同策略的噪声去除等。

4.6 YUV缺点

  • 转化是RGB坐标系的旋转,需要浮点或者定点乘法来执行;
  • 缩放系数的选择必须保证每个RGB组合具有一个有效的YCbCr表示,可是逆变换是非真的,有些YCbCr组合落在RGB的有效范围之外,如果需要计算逆变换,那么意味着YCbCr需要更多位表示。

4.7 YUV采样格式

YUV444

无压缩,YUV三个信道的采样率相同,三个分量信息完整(通常为8bit)。每个Y独享一对UV分量。每个像素3字节。

原始像素:[Y0 U0 V0][ Y1 U1 V1][ Y2 U2 V2]

码流:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

YUV422

2:1的水平取样,垂直完全采样。每两个Y共用一组UV分量。每个像素2字节。

原始像素:[Y0 U0 V0][ Y1 U1 V1][ Y2 U2 V2]

码流:Y0 U0 Y1 V1 Y2 U2 Y3 V3

得到的像素:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

YUV411

4:1的水平取样,垂直完全采样。每四个Y共用一组UV分量。每个像素

8+(8/4)+(8/4)=12bits,1.5个字节。

原始像素:[Y0 U0 V0][ Y1 U1 V1][ Y2 U2 V2]

码流:Y0 U0 Y1 Y2 V2 Y3

得到的像素:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

YUV420

2:1的水平取样,垂直2:1采样。每四个Y共用一组UV分量。每个像素12bit,采样方式不一样了。

原始像素:

[Y0 U0 V0][ Y1 U1 V1][ Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]

码流:

Y0 U0 Y1 Y2 U2 Y3
Y5 V5 Y6 Y7 V7 Y8

得到的像素:

[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

下图中,以黑点表示采样该像素点的Y分量,以空心圆圈表示采样该像素点的UV分量

YUV420比较常用。U = Y / 4 V = Y / 4,所以YUV420 数据在内存中的长度是 width * height * 3 / 2

4.8 YUV存储格式

YUV存储格式与YUV采样的方式密切相关,主流的采样方式有三 种,YUV4:4:4,YUV4:2:2,YUV4:2:0。

打包格式(packed formats):每个像素点的Y,U,V是连续交叉存储的。将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel),和RGB的存放方式类似,在这种格式下每个像素点的YUV数据混合放在一个矩阵中。

平面格式(planar formats):先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。其中Y为width*height,而U、V合占Y的一半。

YUV420中,一些特殊的存储格式:

YUV420p,planer模式,Y、U、V分别位于不同平面。按U、V存储顺序不同,可以分为

YV12:YYYYVVVUUU

YU12:YYYYUUUVVV,又叫****I420

YUV420p的YU12存储格式如下:

YUV420sp,bi-planer或者two-planer双平面,Y在一个平面,UV在同一个平面交叉存储。

NV12:YYYYUVUVUV

NV21**:**YYYYVUVUVU,安卓相机标准图片格式

YUV420sp的NV12存储格式如下:

4.9 RGB与YUV互相转换(OpenCV)

RGB、YUV420p、YUV420sp之间的互相转换(C++)

使用cvtColor函数,在imgproc模块的types_c.h中查看转换代码:

RGB与YUV444互转

CV_BGR2YCrCb   =36,
CV_RGB2YCrCb   =37,
CV_YCrCb2BGR   =38,
CV_YCrCb2RGB   =39,

RGB转YUV420p的YU12

CV_RGB2YUV_I420 = 127,
CV_BGR2YUV_I420 = 128,
CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,
CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,

RGB转YUV420p的YV12

CV_RGB2YUV_YV12  = 131,
CV_BGR2YUV_YV12  = 132,

YUV420p转RGB

CV_YUV2RGB_YV12 = 98,
CV_YUV2BGR_YV12 = 99,
CV_YUV2RGB_IYUV = 100,
CV_YUV2BGR_IYUV = 101,
CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,
CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,
CV_YUV420p2RGB = CV_YUV2RGB_YV12,
CV_YUV420p2BGR = CV_YUV2BGR_YV12,

YUV420sp转RGB

CV_YUV2RGB_NV12 = 90,
CV_YUV2BGR_NV12 = 91,
CV_YUV2RGB_NV21 = 92,
CV_YUV2BGR_NV21 = 93,
CV_YUV420sp2RGB = CV_YUV2RGB_NV21,
CV_YUV420sp2BGR = CV_YUV2BGR_NV21,

RGB转YUV420sp

OpenCV没有RGB直接转YUV420sp的函数。

RGBYUV图像视频格式相关推荐

  1. 视频格式基础知识:让你了解MKV、MP4、H.265、码率、色深等

    本教程将分以下模块详细叙述: 1.封装格式(MP4/MKV-)  vs 媒体格式(H.264/FLAC/AAC-) 2.视频的基础参数:分辨率,帧率和码率 3.图像的表示方法:RGB模型 vs YUV ...

  2. 视频格式基础知识:让你了解MKV、MP4、H.265、码率、色深等等.

    http://www.4k123.com/thread-8194-1-1.html 本教程意在讲述一些视频音频的基础知识和术语.它可以比较详细的回答以下常见的问题: . MP4/MKV这些格式有什么区 ...

  3. 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道

    主要内容有:图像及视频的读取和保存.图像显示.转换灰度图.图像截取.颜色通道提取和组合 那我们开始吧. 1. 图像操作 首先我们导入opencv库,彩色图像一般都是由RGB(红绿蓝)三颜色通道构成,灰 ...

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

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

  5. php视频格式转换---------ffmpeg-php扩展与ffmpeg.exe安装与使用

    HP转换视频格式这个问题, 找了一下午的ffmpeg-php扩展的安装与使用方法,都是千篇一律转载的. 下面是我整理的步骤,希望能帮助大家这个问题. 1.下载ffmpeg-php扩展包和ffmpeg. ...

  6. OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)

    OpenCV 编程简介(矩阵/图像/视频的基本读写操作) Introduction to programming with OpenCV OpenCV编程简介 作者: Gady Agam Depart ...

  7. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )

    文章目录 安卓直播推流专栏博客总结 一. RTMP 格式解析 二. 文件头 Header 分析 三. 标签 Tag 分析 四. 视频标签 Tag 数据分析 安卓直播推流专栏博客总结 Android R ...

  8. 【PC工具】在线格式转换工具,视频格式转换,视频转gif工具

    上次在社区发文章,得知文章编辑器终于支持gif格式的动图了,但得到gif的动图需要将mp4格式的视频进行格式转换,于是便找到了这个在线工具.这年头方便好用是第一位的,功能差不多的情况下在线工具优于绿色 ...

  9. 视频格式转换工具使用

    还记得世界杯期间的那个"神奇教练"米卢吗?在给球员讲解战术.观摩对手比赛的时候,他总是喜欢随身携带一个小巧的摄像机.的确,有些摄像机重量很轻,几乎与普通照相机相仿,拍摄.携带和输出 ...

最新文章

  1. 赋能AI开源生态,Tengine成AI开发利器
  2. 牛逼的人没有不看书的(送书福利)
  3. UVa 11107 (后缀数组 二分) Life Forms
  4. Page Ability 之间的跳转概念和应用分享
  5. matlab 白色像素点,MATLAB 簡單的計算白色輪廓中像素點的個數
  6. spring aop的两种写法aspect和advisor
  7. JS 判断一个字符串是否包含在一个数组中
  8. 详述 Discord Desktop app RCE 挖洞经过,最后得$5000 + $300 (含 PoC 视频)
  9. 实现option上下移动_jQuery操作Select的Option上下移动及移除添加等等
  10. 树线段hdu 4508 美素数(线段树)
  11. diy手工制作泡沫小球_一撮羊毛用针来回的戳,DIY手工制作羊毛毡小动物,越戳越带劲...
  12. 第 7 章 Neutron - 067 - Neutron 架构
  13. adb手机无法识别 vivo_vivo安卓adb工具
  14. 深入解析Windows操作系统(笔记1)
  15. .rpt文件内容读取java_Java中读取File文件内容转为String类型
  16. html动画3d背景图片,jQuery和CSS3全屏3D背景图片视觉差特效
  17. django的ORM常用字段和参数
  18. oracle diagnosticdest,Oracle 11g自动诊断信息库(Automatic Diagnostic Repository,ADR)概述
  19. R中常用统计指标含义
  20. 银河麒麟服务器操作系统设置网卡自启动

热门文章

  1. uni-app支付宝微信支付
  2. 质数筛的应用——等差素数列
  3. 智能导诊--菜鸡的程序人生
  4. STM32F103配合STM32CubeMX实现SPI读写flash
  5. 空气质量控制系统中的AT-AC1200和AT-CSE100、AT-CEL100的应用参数
  6. 声音识别动画(上)-----矩形声音识别动画
  7. 功率谱和FFT变换频谱
  8. “他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力
  9. python用turtle写字_python编程课---turtle
  10. 分享古典唯美水墨梅商务汇报PPT模板