Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用openCV和Logitech C920使python每秒记录30或60帧_Python_Opencv_Webcam_Video Capture_Logitech - Fatal编程技术网

如何使用openCV和Logitech C920使python每秒记录30或60帧

如何使用openCV和Logitech C920使python每秒记录30或60帧,python,opencv,webcam,video-capture,logitech,Python,Opencv,Webcam,Video Capture,Logitech,我正在尝试以60 FPS的速度录制720p视频,或以30 FPS的速度录制1080p视频,但是在python上使用C920网络摄像头和OpenCV时,我只能以720p的速度录制10 FPS的视频,而在1080p上录制5 FPS的视频 我尝试了很多不同的openCV设置,但是没有改变输出的FPS import cv2 import time FPS = 0 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*'MJPG') if

我正在尝试以60 FPS的速度录制720p视频,或以30 FPS的速度录制1080p视频,但是在python上使用C920网络摄像头和OpenCV时,我只能以720p的速度录制10 FPS的视频,而在1080p上录制5 FPS的视频

我尝试了很多不同的openCV设置,但是没有改变输出的FPS

import cv2
import time
FPS = 0

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')

if(not cap.isOpened()):
    exit()

cap.set(cv2.CAP_PROP_FOURCC, fourcc);
cap.open(cv2.CAP_ANY);
cap.set(cv2.CAP_PROP_CONVERT_RGB, 0);
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 60)

last = time.time()

for i in range(0,100):
    before = time.time()
    rval, frame = cap.read()
    now = time.time()
    print("cap.read() took: " + str(now - before))
    if(now - last >= 1):
        print(FPS)
        last = now
        FPS = 0
    else:
        FPS += 1
cap.release()

我希望它输出60fps,但它只提供9或10fps,OpenCV会自动选择第一个可用的捕获后端。可能是因为它没有自动使用V4L2

如果从源代码进行构建,则还可以同时设置带_V4L=ON的
-D和带_LIBV4L=ON的
-D

OpenCV选择的像素格式可能不支持所需的帧速率,即所需的分辨率。在Linux上,您可以使用
v4l2 ctl--list formats ext
v4l2 ctl--all
查看设置

要设置要使用的像素格式,请设置捕获的
CAP_PROP_FOURCC
属性:

capture = cv2.VideoCapture(cam_id, cv2.CAP_V4L2)
capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

运行此代码的硬件规格是什么?如果您的fps以更高的分辨率下降,很明显脚本受到CPU或相机发送输入所需时间的限制。如果瓶颈是摄像头,而CPU使用率仍然很低,也许你可以通过使用多个线程来解决。我在windows10、python 3.6.5上运行,结果是我的笔记本电脑(6700HQ)和我的电脑(8700K)都是一样的。如果我在windows中记录,它的速度确实达到1080p30fps