声明:下面的图部分是摘自博主的,感谢博主 https://www.cnblogs.com/tid-think/p/10616789.html,如果涉及侵权,感谢告知,
学习了博主的图,彻底搞懂了yuv格式的知识,yuv格式很多种类,乱七八糟的感觉,学了他的图,加上自己的知识,彻底搞明白了,

一、yuv planar和packed的区别。

YUV格式有两大类:planar和packed。

PIXEL_FORMAT_YVU_SEMIPLANAR_422,
PIXEL_FORMAT_YVU_SEMIPLANAR_420,
PIXEL_FORMAT_YVU_SEMIPLANAR_444,
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
PIXEL_FORMAT_YUV_SEMIPLANAR_420,
PIXEL_FORMAT_YUV_SEMIPLANAR_444,
PIXEL_FORMAT_YUYV_PACKAGE_422,
PIXEL_FORMAT_YVYU_PACKAGE_422,
PIXEL_FORMAT_UYVY_PACKAGE_422,

对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。 对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。

二、yuv422,yuv420,yuv444的区别。

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

什么意思额,看下面的图,第二张图,实心黑圈代表u和v的值,每两个y共用一个uv,第三张图,空心白圈代表u和v的值,第一第二行,列共用一个u和v,

假如图像视720※576的
(1)、yuv444,图片的大小是720x576x3个字节,是总像素大小的3倍
y的字节是720x576
u的字节是720x576
v的字节是720x576

下面的图是摘自博主的,感谢博主 https://www.cnblogs.com/tid-think/p/10616789.html,如果涉及侵权,感谢告知,
博主原话
首先要介绍的是YUV444,这种格式占用空间最大,每个像素点有一个Y分量+一个U分量+一个V分量所以和rgb一样每个像素点占用3个字节!但是根据UV存储顺序不一样,又有两种不同的格式。

(2)、yuv422,图片的大小是720x576x2个字节,是总像素大小的2倍
y的字节是720x576
u的字节是720x576 /2
v的字节是720x576 /2

下面的图是摘自博主的,感谢博主 https://www.cnblogs.com/tid-think/p/10616789.html,如果涉及侵权,感谢告知,
博主原话
接下来是YUV422 每两个Y分量公用一个UV分量,所以一个像素占用两个字节,根据存储顺序不同又分为四种不同的格式。
还有一种变态的V210格式,好像是苹果搞出来的。


(3)、yuv420,图片的大小是720x576x3/2个字节,是总像素大小的1.5倍
y的字节是720x576 w*h
u的字节是720x576 /4 (w/2) * (h/2)
v的字节是720x576 /4 (w/2) * (h/2)


下面的图是摘自博主的,感谢博主 https://www.cnblogs.com/tid-think/p/10616789.html,如果涉及侵权,感谢告知,
博主原话
接下来是YUV420 每四个y分量共用一个UV分量,所以每个像素点占用1.5个字节空间,根据存储顺序不一样又分为四个不同的类型。

如果要将4 :2: 2 和4:2:0 转换:上图很清晰,只需把uv的值在垂直方向隔行取,就额可以了。

三、采集到的yuv420转rgb
下面的程序能帮助更能理解,yuv420的储存格式

yuv2rgb的转换公式:参数可以调,颜色将不一样。
r= y + 402 *(v - 128);
g = y - 0.34413 *(u - 128) - 0.71414 *(v - 128);
b = y + 1.772 *(u -128);

datas[0]对应装的是y,这里是指针,指向了一段存y的内存,
datas[1]对应装的是u,这里是指针,指向了一段存u的内存,
datas[2]对应装的是v,这里是指针,指向了一段存v的内存,
看下图,我的数据是这样存储的,别搞错了,下面的代码清楚的知道y是如何和u,v组合提取的。

如果要参考公式是可以的,如果你的yuv和我不一样,别傻傻的直接用,修改看你自己。
转换后,存在了数组里,调用的是opcv里的imwrite函数,保存为bmp格式的图片,自动填充bmp数据头,如果有需要自己
保存为bmp的,问度娘,如何填充54字节的数据头。

int w = 800;
int h = 600;
char rgbBuf[800*600*3] = { 0 };
{int i = 0,j = 0;double  y = 0, u = 0, v = 0;double  r = 0, g = 0, b = 0;for (j = 0; j < h; j++) {for (i = 0; i < w; i++) {             rgbBuf[(w *j + i) * 3] =  0;rgbBuf[(w*j + i) * 3 + 1] =  0;rgbBuf[(w*j + i) * 3 + 2] =  0;y = *(datas[0] + w*j + i);v = *(datas[1] +(w/2)* (j /2) + (i /2));//这里w/2,j/2,i/2,是u,v只有y的一半宽和高u = *(datas[2] +(w/2)* (j /2) + (i /2));r= y + 402 *(v - 128);g = y - 0.34413 *(u - 128) - 0.71414 *(v - 128);b = y + 1.772 *(u -128);if (r>255)r=255;if (r<0)r=0;if (g>255)g=255;if (g<0)g=0;if (b>255)b=255;if (b<0)b=0;rgbBuf[(w*j + i) * 3]       =  (char)(r);rgbBuf[(w*j + i) * 3 + 1]   =  (char)(g);rgbBuf[(w *j + i) * 3 + 2]  =  (char)(b);}}cv::Mat resultMat(cv::Size(width, height), CV_8UC3, &rgbBuf);ret = imwrite(url, resultMat);}

yuv422,yuv420,yuv444的区别相关推荐

  1. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)

    如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额1元起步,多少随意 锋影 email:174176320@qq.com YUV图解 (YUV444, YUV422, YUV ...

  2. 音视频编解码: YUV采样格式中的YUV444,YUV422,YUV420理解

    YUV各种采样格式的说明 通常我们用RGB表示一种彩色.计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色. 而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像 ...

  3. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)-- 转

    YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)

  4. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  5. 图像原始格式(YUV444 YUV422 YUV420)一探究竟

    前段时间搞x264编码测试,传参的时候需要告诉编码器我的原始数据格式是什么,其中在x264.h头文件中定义了如下一堆类型. /* Colorspace type */ #define X264_CSP ...

  6. yuv图解(YUV444,YUV422,YUV420,YV12,NV12,NV21)

    参考文章 图解YUV YUV是什么 YUV(444,422,420) And YUV(Packed,Planar,Semi-Planar) 知识点 YUV是用一个称为Y(相当于灰度)的亮度分量和两个色 ...

  7. YUV422 YUV420 Planar Semi-Planar详解

    前言 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中, 通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三 ...

  8. YUV422/YUV420

    YUV三种数据格式占用空间计算: YUV444 ==> YUV444 1920*1080 ==>  1920*1080个Y+1920*1080个U+1920*1080个V = 1920*1 ...

  9. YUV420P,YUV420,YUV420SP区别

    YUV420P,YUV420,YUV420SP 都是视频压缩格式中常用的 YUV 颜色编码方式. YUV420P 指的是 YUV 色彩空间的一种,也称为 YUV 4:2:0 planar,其中的 Y. ...

  10. YUV422 YUV420 Planar \ Semi-Planar \ Interleaved

    关于yuv 格式 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中, 通常是几个相邻的像素组成一个宏像素(macro-pixel); ...

最新文章

  1. [Js/Jquery]jquery插件开发
  2. void func(int n)C语言,C语言高手帮忙分析一下复杂的函数声明
  3. 【深度学习】U型的Transfomer网络(Swin-Unet)和Swin-Transformer分类
  4. awk 分隔符 多个空格_如何在awk中指定多个分隔符
  5. OpenCV演示代码以查找图像中的轮廓(附完整代码)
  6. AT3955-[AGC023D]Go Home【结论,递归】
  7. AJAX Control Toolkit——DropShadow(阴影和圆角框)
  8. 这才是真正适合小白的教程:Python有什么用?数据化运营怎么做?
  9. keras笔记-模型保存以及tensorboard的使用
  10. 文案“跑路”了,这是我们的新广告语
  11. JavaScript正则表达式大全
  12. 【Windows Server 2019】DHCP服务器配置与管理——安装和配置DHCP服务 Ⅱ
  13. 3DMAX和MAYA的区别
  14. icon-font的使用
  15. apache的基本使用
  16. 金蝶k3单据编码规则_金蝶K3财务操作手册
  17. 乔布斯的简历17.4万拍卖,HR看了想打人……
  18. 【算法专题】卡特兰数
  19. haproxy stats enable功能详解
  20. http://blog.csdn.net/zxl315/article/details/10830105

热门文章

  1. 使用LoadRunner进行并发测试、压力测试和负载测试
  2. chrome PPAPI 开发(一)
  3. BUUCTF-MISC(1)
  4. java 反正切不正确_反正切函数
  5. CodeBlocks下载安装与SDL下载使用配置教程
  6. 《金字塔原理》之表达的逻辑
  7. linux驱动调试方法
  8. 【Git版本控制管理】Git入门介绍及Git的安装
  9. 离散数学 --- 特殊图 --- 欧拉图,哈密顿图
  10. 微信小程序图片转换成文字_文字工作者必备 微信小程序图片转文字