PythonはYUVファイルを読み込み、

1770 ワード

PythonはYUV形式のファイルを読み込みopencvで表示
     
Opencvで読み取ることができるピクチャの種類は多いが、「.jpg」や「.png」のような比較的一般的なタイプが多いが、YUV形式のファイルを直接読み取ることはできず、pythonでYUVファイルを読み取り、それに対応する変換を行ってからopencvで読み取る、その後の対応する処理を行う必要がある.
あまり話さないで、直接プログラムに行きます.
import cv2
from 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ファイルをPILのイメージフォーマットに変換する必要がある場合は、main関数において、僅かな処理を行うだけでよい.
YY=data[0][0]  
im=Image.frombytes('L',(720,1280),YY.tostring())  
また、PILのイメージをopencvのmat形式に変換するには、PILをマトリクス形式に変換するだけでよい.
im_array = np.array(im)
#      np.asarray(im)     np.array()     ,np.asarray()