python将YUV420P文件转PNG图片格式的两种方法
方法一:
importos importcv2ascv importnumpyasnp #读取yuv420p的一帧文件,并转化为png图片 if__name__=='__main__': filepath='one_frame_of_highway.yuv' binfile=open(filepath,'rb') size=os.path.getsize(filepath) image_width=352 image_hight=288 image_y=[[0]*image_widthforiinrange(image_hight)] image_u=[[0]*image_widthforiinrange(image_hight)] image_v=[[0]*image_widthforiinrange(image_hight)] forrinrange(image_hight): forcinrange(image_width): image_y[r][c]=binfile.read(1)[0] Image_Y=np.array(image_y) forrinrange(int(image_hight/2)): forcinrange(int(image_width/2)): pixel=binfile.read(1)[0] image_u[2*r+0][2*c+0]=pixel image_u[2*r+1][2*c+0]=pixel image_u[2*r+0][2*c+1]=pixel image_u[2*r+1][2*c+1]=pixel Image_U=np.array(image_u) forrinrange(int(image_hight/2)): forcinrange(int(image_width/2)): pixel=binfile.read(1)[0] image_v[2*r+0][2*c+0]=pixel image_v[2*r+0][2*c+1]=pixel image_v[2*r+1][2*c+0]=pixel image_v[2*r+1][2*c+1]=pixel Image_V=np.array(image_v) binfile.close() compose=np.array([Image_Y,Image_V,Image_U]).transpose([1,2,0]).astype(np.uint8) Image=cv.cvtColor(compose,cv.COLOR_YUV2RGB) cv.imwrite("one_frame_of_highway.yuv.png",Image)
方法二:
ffmpeg-s352x288-ione_frame_of_highway.yuvone_frame_of_highway.png
highway视频网址:http://trace.eas.asu.edu/yuv/index.html
附录:
将yuv文件转化为一帧帧yuv文件
#include#include #include #include #include #include #include #include #include #include #include intFile_Size(intfd){ structstatst; fstat(fd,&st); returnst.st_size; } intFrame_Size_Of_Cif(){ intwidth=352; intheigh=288; intY_SIZE=width*heigh; intU_SIZE=Y_SIZE/4; intV_SIZE=Y_SIZE/4; intFrame_SIZE=Y_SIZE+U_SIZE+V_SIZE; returnFrame_SIZE; } intFrames_Of_Cif_File(intfd){ if(fd<0){ printf("InvalidFD!"); return-1; } intFrame_SIZE=Frame_Size_Of_Cif(); intfd_size=File_Size(fd); returnfd_size/Frame_SIZE; } voidAbstract_Frame_From_CIF_File(intfd,char*Path_And_Prefix_Img,intLen){ intFrame_SIZE=Frame_Size_Of_Cif(); charfile[128]; memset(file,0,128); memcpy(file,Path_And_Prefix_Img,Len); uint8_tbuf[Frame_SIZE]; intret=-1; intframes=0; while((ret=read(fd,buf,Frame_SIZE))){ frames+=1; uint64_tlen=strlen(file); sprintf(file+len,"%d",frames); len=strlen(file); sprintf(file+len,"%s",".yuv"); intfdw=open(file,O_RDWR|O_CREAT,0777); write(fdw,buf,ret); memset(file,0,128); memcpy(file,Path_And_Prefix_Img,Len); close(fdw); } printf("Abstract%dframes!\n",frames); } intmain(){ intfd=open("./yuv420p_352x288.yuv",O_RDONLY); Abstract_Frame_From_CIF_File(fd,"/home/liu/Frames/Frames_",strlen("/home/liu/Frames/Frames_")); close(fd); return0; }
以上就是python将YUV420P文件转PNG图片格式的两种方法的详细内容,更多关于python将YUV420P文件转PNG的资料请关注毛票票其它相关文章!