<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<p><strong>声明:下面的图部分是摘自博主的,感谢博主 https://www.cnblogs.com/tid-think/p/10616789.html,如果涉及侵权,感谢告知,<br /> 学习了博主的图,彻底搞懂了yuv格式的知识,yuv格式很多种类,乱七八糟的感觉,学了他的图,加上自己的知识,彻底搞明白了,</strong></p>
讯享网
一、yuv planar和packed的区别。
讯享网
二、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字节的数据头。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/200923.html