Python讀取YUV格式文件,并使用opencv顯示的方法
opencv可以讀取的圖片類型比較多,但大多是比較常見(jiàn)的類型,比如".jpg"和".png",但它不能直接讀取YUV格式的文件,需要通過(guò)python讀取YUV文件,并進(jìn)行相應(yīng)的轉(zhuǎn)換后,才能被opencv讀取,并進(jìn)行后續(xù)相應(yīng)的處理.
話不多說(shuō),直接上程序。
import cv2from numpy import * import Image screenLevels = 255.0 def yuv_import(filename,dims,numfrm,startfrm): fp=open(filename,'rb') blk_size = prod(dims) *3/2 fp.seek(blk_size*startfrm,0) Y=[] U=[] V=[] print dims[0] print dims[1] d00=dims[0]//2 d01=dims[1]//2 print d00 print d01 Yt=zeros((dims[0],dims[1]),uint8,'C') Ut=zeros((d00,d01),uint8,'C') Vt=zeros((d00,d01),uint8,'C') for i in range(numfrm): for m in range(dims[0]): for n in range(dims[1]): #print m,n Yt[m,n]=ord(fp.read(1)) for m in range(d00): for n in range(d01): Ut[m,n]=ord(fp.read(1)) for m in range(d00): for n in range(d01): Vt[m,n]=ord(fp.read(1)) Y=Y+[Yt] U=U+[Ut] V=V+[Vt] fp.close() return (Y,U,V) if __name__ == '__main__': width=1280 height=720 data=yuv_import('test.yuv',(height,width),1,0) YY=data[0][0] cv2.imshow("sohow",YY) cv2.waitKey(0)如果YUV文件需要轉(zhuǎn)換為PIL的image格式,那么只需在main函數(shù)中,進(jìn)行稍微的處理。
YY=data[0][0] im=Image.frombytes('L',(720,1280),YY.tostring()) 另外,如果PIL的image想轉(zhuǎn)換為opencv的mat格式,只需將PIL轉(zhuǎn)換為矩陣的形式。
im_array = np.array(im)# 也可以用 np.asarray(im) 區(qū)別是 np.array() 是深拷貝,np.asarray() 是淺拷貝
以上這篇Python讀取YUV文件,并顯示的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林站長(zhǎng)站。
新聞熱點(diǎn)
疑難解答
圖片精選