PythonはYUVファイルを読み込み、
1770 ワード
PythonはYUV形式のファイルを読み込みopencvで表示
Opencvで読み取ることができるピクチャの種類は多いが、「.jpg」や「.png」のような比較的一般的なタイプが多いが、YUV形式のファイルを直接読み取ることはできず、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()