使用Python显示YUV420图像

本文分享了一段Python代码,用于读取并显示YUV420半平面格式的图像。通过定义`readYuvFile`和`yuv2rgb`函数,将YUV数据转换为RGB并保存为BMP图像进行展示。
AI助手已提取文章相关产品:

由于网上没找到好用的显示YUV420semiplanar格式图像的工具,自己整理了一段显示YUV420图像的python代码,分享给大家。

###############################################################
# author: sl
# function: view yuv image file(only support YUV420SemiPlanar)
# date: 2016-8-30
###############################################################
from numpy import *
from PIL import Image

def readYuvFile(filename,width,height):
fp=open(filename,'rb')
uv_width=width//2
uv_height=height//2

Y=zeros((height,width),uint8,'C')
U=zeros((uv_height,uv_width),uint8,'C')
V=zeros((uv_height,uv_width),uint8,'C')

for m in range(height):
for n in range(width):
Y[m,n]=ord(fp.read(1))
for m in range(uv_height):
for n in range(uv_width):
V[m,n]=ord(fp.read(1))
U[m,n]=ord(fp.read(1))

fp.close()
return (Y,U,V)

def yuv2rgb(Y,U,V,width,height):
U=repeat(U,2,0)
U=repeat(U,2,1)
V=repeat(V,2,0)
V=repeat(V,2,1)
rf=zeros((height,width),float,'C')
gf=zeros((height,width),float,'C')
bf=zeros((height,width),float,'C')

rf=Y+1.14*(V-128.0)
gf=Y-0.395*(U-128.0)-0.581*(V-128.0)
bf=Y+2.032*(U-128.0)

for m in range(height):
for n in range(width):
if(rf[m,n]>255):
rf[m,n]=255;
if(gf[m,n]>255):
gf[m,n]=255;
if(bf[m,n]>255):
bf[m,n]=255;

r=rf.astype(uint8)
g=gf.astype(uint8)
b=bf.astype(uint8)
return (r,g,b)

if __name__=='__main__':
width=640
height=480
data=readYuvFile('/home/sl/xx.yuv',width,height)
Y=data[0]
im=Image.fromstring('L',(width,height),Y.tostring())
im.save('/home/sl/y.bmp')
im.show()

RGB=yuv2rgb(data[0],data[1],data[2],width,height)
im_r=Image.fromstring('L',(width,height),RGB[0].tostring())
im_g=Image.fromstring('L',(width,height),RGB[1].tostring())
im_b=Image.fromstring('L',(width,height),RGB[2].tostring())
im_rgb=Image.merge('RGB',(im_r,im_g,im_b))
im_rgb.save('/home/sl/rgb.bmp')
im_rgb.show()


更多文章,可查看个人博客:http://knowthendo.cn/ 点击打开链接


您可能感兴趣的与本文相关内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Winslow~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值