Python 读取 YUV(NV12) 视频文件实例
一、YUV简介
YUV:是一种颜色编码方法,常使用在各个视频处理组件中
Y'UV,YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠
Y表示明亮度(单取此通道即可得灰度图),U和V则是色度、浓度
主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0
可以根据其采样格式来从码流中还原每个像素点的YUV值,进而通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来
YUV4:2:0数据在内存中的长度是3/2*heigth*width,是RGB24(heigth*width*3)格式视频数据内存的一半
二、YUV420(NV12、NV21、I420、YV12)
#NV12、NV21的存储格式为Y平面,UV打包,即:Y信息存储在一个数组中,UV信息存储在一个矩阵中。 #不同点在于UV的排列顺序 NV12:YYYYYYYYUVUV=>YUV420SP NV21:YYYYYYYYVUVU=>YUV420SP #I420、YV12三个分量均为平面格式,即:分别存放在三个Byte型数组中 I420:YYYYYYYYUUVV=>YUV420P YV12:YYYYYYYYVVUU=>YUV420P
假设一个分辨率为8X4的YUV图像,它们的格式如下图:
三、读取YUV(NV12)视频文件并保存
#!/usr/bin/envpython3 #-*-coding:utf-8-*- importcv2 importnumpyasnp defyuv2bgr(filename,height,width,startfrm): """ :paramfilename:待处理YUV视频的名字 :paramheight:YUV视频中图像的高 :paramwidth:YUV视频中图像的宽 :paramstartfrm:起始帧 :return:None """ fp=open(filename,'rb') framesize=height*width*3//2#一帧图像所含的像素个数 h_h=height//2 h_w=width//2 fp.seek(0,2)#设置文件指针到文件流的尾部 ps=fp.tell()#当前文件指针位置 numfrm=ps//framesize#计算输出帧数 fp.seek(framesize*startfrm,0) foriinrange(numfrm-startfrm): Yt=np.zeros(shape=(height,width),dtype='uint8',order='C') Ut=np.zeros(shape=(h_h,h_w),dtype='uint8',order='C') Vt=np.zeros(shape=(h_h,h_w),dtype='uint8',order='C') forminrange(height): forninrange(width): Yt[m,n]=ord(fp.read(1)) forminrange(h_h): forninrange(h_w): Ut[m,n]=ord(fp.read(1)) forminrange(h_h): forninrange(h_w): Vt[m,n]=ord(fp.read(1)) img=np.concatenate((Yt.reshape(-1),Ut.reshape(-1),Vt.reshape(-1))) img=img.reshape((height*3//2,width)).astype('uint8')#YUV的存储格式为:NV12(YYYYUV) #由于opencv不能直接读取YUV格式的文件,所以要转换一下格式 bgr_img=cv2.cvtColor(img,cv2.COLOR_YUV2BGR_NV12)#注意YUV的存储格式 cv2.imwrite('yuv2bgr/%d.jpg'%(i+1),bgr_img) print("Extractframe%d"%(i+1)) fp.close() print("jobdone!") returnNone if__name__=='__main__': _=yuv2bgr(filename='xxx.yuv',height=1080,width=1920,startfrm=0)
以上这篇Python读取YUV(NV12)视频文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。