Python讀取YUV文件,并顯示的方法
Python讀取YUV格式文件,并使用opencv顯示的方法
opencv可以讀取的圖片類型比較多,但大多是比較常見的類型,比如".jpg"和".png",但它不能直接讀取YUV格式的文件,需要通過python讀取YUV文件,并進行相應(yīng)的轉(zhuǎn)換后,才能被opencv讀取,并進行后續(xù)相應(yīng)的處理.
話不多說,直接上程序。
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文件需要轉(zhuǎn)換為PIL的image格式,那么只需在main函數(shù)中,進行稍微的處理。
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文件,并顯示的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python利用Faiss庫實現(xiàn)ANN近鄰搜索的方法詳解
這篇文章主要介紹了Python利用Faiss庫實現(xiàn)ANN近鄰搜索的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-08-08
詳解python路徑拼接os.path.join()函數(shù)的用法
os.path.join()函數(shù):連接兩個或更多的路徑名組件。這篇文章主要介紹了python路徑拼接os.path.join()函數(shù)的用法,需要的朋友可以參考下2019-10-10
Python Requests.post()請求失敗時的retry設(shè)置方式
這篇文章主要介紹了Python Requests.post()請求失敗時的retry設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Python對ElasticSearch獲取數(shù)據(jù)及操作
這篇文章主要為大家詳細介紹了Python對ElasticSearch獲取數(shù)據(jù)及操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04

