問題:
新到的攝像頭在windows下用opencv打開,設置分辨率為3840*2160,輸出圖像基本為實時。在linux下用opencv打開,同樣分辨率。輸出圖像fps降到了1 。
原因:
視頻輸出格式為yuv時,幀率只有1。只有在輸出格式為mjpg時,幀率才為實時。
為什么呢?
因為其中有一個瓶頸:
輸出fps=30,yuv格式的4k視頻,所需的數據傳輸速率為30 f/s * 3840*2160 Byte / 2 = 124416000 Byte/s = 118MB/s
而USB2.0的傳輸速率:
2000年制定的USB 2.0標准是真正的USB 2.0,被稱為USB 2.0的高速(High-speed)版本,理論傳輸速度為480 Mbps,即60 MB/s,但實際傳輸速度一般不超過30 MB/s,采用這種標准的USB設備也比較多。
解決:
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_V4L1)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
MJPG 格式是motion jpeg,也就是將視頻的每一幀都按照jpg格式壓縮了,數據量大大降低。然而還有一個問題是,不知道默認的圖像質量是多少,可不可以設置。后面需要的時候再研究吧。。。