cv2.VideoCapture從攝像頭獲取視頻流並處理但是處理速度慢
在做深度學習視覺相關項目的時候,經常會遇到無法做到實時的情況。比如處理一幀圖像要3s,但是攝像頭採集的視頻裏在這3s內,可能已經讀了好幾十幀(假如fps是20)。那麼處理完這一幀之後,下一次cap.read()
返回的是第二幀還是第62幀。
source:Opencv讀取攝像頭緩衝區擁塞,有延遲情況下,處理最新幀的方法
實際上Opencv的videocapture讀取攝像頭時,攝像頭的每幀數據會全部存入緩衝區,每次cap.read()
都是從緩衝區裏取出一幀數據。如果你的處理速度小於存進緩衝區的速度,那麼緩衝區的圖片就越積累越多,而你處理的圖片可能是攝像頭拍攝的好幾秒前的數據。
一般這種情況下,如果實在不能提升處理速度,那就只能嘗試其他方法了,比如:
- 多線程
- 在要求不那麼嚴格的情況下,採用跳幀處理的方法。每隔一定的幀數處理一次。