使用opencv进行c++视频捕获

标签 c++ windows opencv video-capture

我尝试使用 Logitech C920 网络摄像头以全高清分辨率捕获视频。在此分辨率下它可提供 30 fps。

它可以以 30 fps 的速度与 Windows 相机应用程序一起使用,但无论我尝试什么,我都无法使用 opencv videoCapture 获得这个 fps 速率。

注意:我使用 Windows 10 和 vs15。 我尝试了不同的 USB 端口、opencv 版本和编解码器。结果相同,约 5 fps。

我测量的 fps 忽略了前 10 帧。这是我的计算:仅 read = "5.04fps"、 read+imshow = "4.97fps"和 read+imshow+write = "4.91fps"

void main()
{
    mainStream.open(0);
    mainStream.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
    mainStream.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
    mainStream.set(CV_CAP_PROP_FPS, 30);
    mainStream.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
    mainWriter.open("outputnew2.avi", CV_FOURCC('M', 'J', 'P', 'G'), 30, cv::Size(frameW, frameH), true);
    namedWindow("frame", 1);

    while (true){
        Mat frame;
        mainStream >> frame;
        imshow("frame", frame);
        if (waitKey(5) == 27)
            break;
        mainWriter << frame;
    }
    mainStream.release();
    mainWriter.release();
}

最佳答案

首先:

imshow 方法非常慢(在相当相对的范围内)。尝试在不显示图像并且不将图像写入文件时测量真实的 fps。

完成后,您可以检查实际 fps 并确定两个选项(显示或写入)中哪一个会降低您所达到的 fps 速率。

请发布所达到的 fps 速率的结果,而无需显示或写入图像。

编辑:

好吧,你几乎总是能达到 5 fps,这有点慢。保存的视频(或图像)是否符合您想要的分辨率?它们真的是1920x1080吗 ?

在这种情况下,测量的时间与发布和调试版本不同吗?

编辑2:

如果相同的代码适用于其他 USB 摄像头(并且它们产生的 fps 比 C920 更高),我立即怀疑是 C920 本身(或至少是其驱动程序)。如果您卸载它的驱动程序(最终重新启动)并再次安装最新的驱动程序,会有帮助吗?

另一件事:如果您不请求 30,但可能需要 20 fps,那么测量的 fps 会发生变化吗?

编辑3:

这似乎是一个驱动程序问题(从评论合并)。重新安装驱动程序是解决此问题的一种方法

关于使用opencv进行c++视频捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584913/

相关文章:

C++:类问题

c# - Windows如何获取已经运行的进程的进程组?

opencv - python cv2.calibrateCamera 的输入参数

colors - 大多数 "stable"颜色表示 : RGB? HSV?国际实验室?

c++ - CStrings 初始化和使用 vector 的 vector

c++ - Rcpp、C++11、 vector 和 Windows 的问题

c++ - 多个翻译单元中函数模板实例化的同一性

windows - powershell 传递命令行参数

python - 尝试python多处理的Windows上的RuntimeError

opencv - 在特定位置从 cv::Mat 中查找像素颜色