使用Python OpenCV VideoCapture降低帧速率

时间:2019-02-19 10:43:15

标签: python opencv video-capture cv2

我有一个运行Raspbian 9的Raspberry Pi。我安装了OpenCV 4.0.1。我连接了USB网络摄像头。 Raspberry无头,我连接了ssh <user>@<IP> -X。目的是在客户端计算机上获得实时视频流。

问题是大约有2秒左右的延迟。另外,流的播放不稳定,这意味着先慢然后再快。

我的猜测是SSH不能跟上相机的默认30fps。因此,我尝试降低帧速率,因为只要没有明显的滞后,我就可以降低帧速率。我自己降低帧速率的尝试没有效果。

我的代码评论了我自己尝试降低帧率但无法正常工作的部分。

import cv2
#import time

cap = cv2.VideoCapture(0)

#cap.set(cv2.CAP_PROP_FPS, 5)

while(True):
    ret, frame = cap.read()

    #time.sleep(1)

    #cv2.waitKey(100)

    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

我尝试降低帧频的方法:

  1. 我尝试设置cap.set(cv2.CAP_PROP_FPS, 5)(也尝试了10或1)。如果然后print(cap.get(cv2.CAP_PROP_FPS))可以给我刚设置的帧速率,但对播放没有影响。

  2. 我尝试在while循环中使用time.sleep(1),但它对视频没有影响。

  3. 我尝试按照Quora上的建议在https://qr.ae/TUSPyN中使用while循环中的第二个cv2.waitKey(100),但这也没有效果。

编辑1(time.wait和waitKey确实起作用):

正如评论中指出的那样,time.sleep(1)cv2.waitKey(1000)应该都可以工作,并且实际上它们确实可以工作。有必要将它们放在cv2.imshow()之后的while循环的末尾。

如第一条评论中所述,为流媒体选择其他设置可能更好,这是我现在正在寻找的摆脱滞后的方法。

编辑2(xpra代替ssh -X):

我们发现,即使在所有尝试降低帧速率的尝试之后,ssh -X仍然滞后。我们发现xpra的速度要快得多,即不需要降低帧频或分辨率,也不需要明显的延迟。

0 个答案:

没有答案