2017-07-28 811 views
1

我用Python編寫了一個用Opencv播放一些視頻的程序......它在Windows 10中正常工作。 但我想用Raspberry運行它,問題是視頻將會打得太慢了。 我使用OMXplayer,它播放文件非常流暢。所以,問題不在於樹莓(我想是這樣......)Opencv播放視頻太慢

我簡化我的代碼:

print "---Playing the Videos and Images---" 
cap = cv2.VideoCapture(str(VideoPath)) 
while cap.isOpened(): 
ret, frame = cap.read() 
if ret == True: 
    cv2.imshow('videoWindow',frame) 
if cv2.waitKey(25) & 0xFF == ord('q'): 
    a=2 
    break 

cv2.destroyAllWindows() 
print "!...Done...!" 

你能告訴我是什麼問題?

+1

AFAIK OMXPlayer是硬件加速(幀解碼在GPU上,並直接發送到顯示緩衝區)。 OpenCV不支持OMXPlayer,所以它可能使用ffmpeg/gstreamer/v4l/etc。解碼CPU上的幀。希望使用較低分辨率的視頻版本可以加速這一點。另一種解決方法聽起來有些複雜/過度:獲取OMXPlayer資源,複製處理解碼像素的部分,然後將這些像素(以正確的順序)發送到'cv :: Mat',並讓OpenCV完成剩下的處理。 –

回答

1

您的循環並不在乎視頻中的fps。 看起來像你的視頻沒有被緩存在RAM中,你直接從你的磁盤讀取它,這就是爲什麼你的視頻顯示緩慢。 預載入您的視頻,只需在顯示它們之前將所有幀保存在列表中。

獲得cv2.X的video.get(cv2.cv.CV_CAP_PROP_FPS)的fps或cv3.X的video.get(cv2.CAP_PROP_FPS)

現在,測量每個循環迭代的時間並計算所需的睡眠間隔。 看看這裏:https://www.learnopencv.com/how-to-find-frame-rate-or-frames-per-second-fps-in-opencv-python-cpp/