使用C ++以60fps流式传输Logitec C922

时间:2017-08-25 14:43:02

标签: c++ opencv webcam frame-rate

我想用C ++捕获带有网络摄像头(即logitech C922)的图像。有没有人用60fps和720p的网络摄像头成功捕获图像?我在下面的线程中读取代码并添加" cap.set(CAP_PROP_FPS,60)",但帧速率保持在大约30fps。 How to set camera fps in opencv?

然后我发布了同样的问题,但论坛正在维护中。 http://answers.opencv.org/question/172992/streaming-logitec-c922-at-60fps-with-c/ 我将两个建议的代码添加到我的。 结果,fps的值是33.3 ......在我使用cap.set(CAP_PROP_EXPOSURE,-5)的情况下,FPS是60.0,因为我在办公室和晚上在这里。 我试图将较低的值用于CAP_PROP_EXPOSURE(例如-10),但fps没有改变。 imshow显示的图像显然没有以60fps的速度更新。 我有什么可以做的吗?

这是我使用的代码。

VideoCapture cap(0); //capture the video from web cam

if (!cap.isOpened())  // if not success, exit program
{
    cout << "Cannot open the web cam" << endl;
    return -1;
}
cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M','J','P','G'));
cap.set(CAP_PROP_FPS, 60);
cap.set(CAP_PROP_EXPOSURE, -5);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);

cout << cap.get(CAP_PROP_FPS) << endl;

cvNamedWindow("img");
time_t cap_start, cap_end;
Mat frame;
double MAX_FRAME_NUM = 100;
time(&cap_start);
for (int n = 0; n < MAX_FRAME_NUM; n++) {
    cap >> frame;
}
time(&cap_end);
double fps = MAX_FRAME_NUM / difftime(cap_end, cap_start);
cout << "fps:" << fps << endl;
cv::waitKey(0);

环境信息OpenCv:3.3.0操作系统:Windows 10 Pro IDE:Visual Studio 2017 CPU:i7-7560U RAM 16GB USB:3.0

最好的问候,gellpro

1 个答案:

答案 0 :(得分:0)

我偶然发现了这台相机的问题。 我的环境是Ubuntu 18.04,python 3.6.5和OpenCV 3.4。

我发现您的第一个链接中的this solution正在运行:

cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));

对于python,我使用的代码是:

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
cap.set(cv2.CAP_PROP_FPS, 60)