OpenCV摄像头MJPG低帧率问题

4
问题是我在OpenCV3中使用Logitech C270摄像头捕获时,FPS一直很低。我尝试了一些方法,详见代码注释。
Mat frame;
int main(int argc, char *argv[])

{
    // i've tried it this way
//int apiBackend = cv::CAP_DSHOW;
//cv::VideoCapture cap(0+apiBackend);

//and tis way
VideoCapture cap(0);
cap.open(0);

cap.set(CAP_PROP_FOURCC ,cv::VideoWriter::fourcc('M', 'J', 'P', 'G') );

//cap.set(CAP_PROP_EXPOSURE , 1); //changing this gives no result
//cap.set(CAP_PROP_GAIN , 10);    // same with this

cap.set(CAP_PROP_FPS, 100);
cap.set(CAP_PROP_FRAME_WIDTH, 640);
cap.set(CAP_PROP_FRAME_HEIGHT, 480);

while(1)
{
    float e1 = cv::getTickCount();

    cap >> frame; // get a new frame from camera

    imshow("frame", frame);

    float e2 = cv::getTickCount();
    float t = (e2 - e1)/cv::getTickFrequency();
    float fps = 1.0 / t;
    std::cout << fps << std::endl;

    if(waitKey(1) >= 0) break;
}

return 0;
}

将CAP_PROP_FPS更改为5可以正常工作,并且FPS下降。

调整分辨率没有帮助:从320 * 240到1280 * 720,我仍然得到约16 FPS。

网络摄像头驱动程序是最新的。我有什么遗漏吗?


1
你的主题是否被充分照亮?曝光时间为你提供了可以获得的帧速率的上限。因此,如果相机启用了自动曝光(很可能会这样),它可能正在尝试补偿黑暗环境。 - Dan Mašek
在设置帧速率之前尝试先设置高度和宽度。 - Mark Setchell
@DanMašek,我在黑屋里尝试了一下,帧率没有变化,在所有灯光都开启时也是如此。所以我猜自动曝光已被禁用。 - ub0baa
@MarkSetchell,谢谢,我试过了,但是fps稳定在17。 - ub0baa
你尝试将CAP_DSHOW作为传递给open()函数的选项了吗?我在你的注释代码中没有看到它。 - tunglt
显示剩余4条评论
1个回答

1

感谢大家的建议!看起来答案是相机特定的:我必须安装罗技摄像头软件并禁用RightLight功能,现在FPS约为30。也许有一些方法可以使用cap.set(...)从OpenCV禁用RightLight,但这需要进一步调查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接