面向对象
本文解决的问题:Python处理YUV数据,读取YUV数据并保存为其他类型的图片
简述下起因:
网上找了很多资料,基本都是大同小异,但是当时自己无法理解,直到现在才算是理解了,故而希望能深入浅出的讲清楚
YUV简介
“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度 --维基百科
YUV分类
https://juejin.cn/post/6920848468797816846
如何理解YUV
我会从三个方面讲:YUV排列格式,YUV数据个数,YUV bits。
必须得承认YUV的格式非常的繁多复杂,可能是由于曾经大家都闭门造车导致一家一个格式,YUV有一个特殊的格式400,也就是只有Y分量。在彩色电视出现以前,是黑白电视,YUV解决了这样一个问题,这个问题是RGB无法处理的。
当用户的电视机是彩色的时候,YUV和RGB都能正常显示,但是当用户的电视机是黑白的时候,就需要去除颜色信息,YUV400格式就是黑白图像,当只有Y输入的时候就是黑白图,所以当用户是黑白电视机的时候可以直接舍弃UV分量。
YUV就是int类型的数据,可以理解为纯二进制数据。
YUV文件存储的是0,1两个数字的排列。如果YUV是一张图,那么我们必须知道YUV图片的宽高信息,然后还需要知道YUV的排列格式,最后还需要知道YUV是8bits还是10bits保存的。
举例:
如果一张yuv图片,是8bits的,那么 numpy 中可以这样读取 yuv_data = np.fromfile(yuv_filepath, np.uint8)
此时我们有了yuv的数据,然后就是处理这些数据
我们以Y为基准,Y的数据