当前位置: 首页 > 知识库问答 >
问题:

使用opencv的c视频捕获

何兴邦
2023-03-14

我尝试用全高清分辨率的罗技C920摄像头捕捉视频。它提供30 fps与此分辨率。

它以30 fps的速度与windows摄像头应用程序配合使用,但无论我如何尝试,我都无法通过opencv videoCapture获得这种fps速度。

注意:我使用windows 10和vs15。我尝试了不同的usb端口,opencv版本和编解码器。结果是相同的,〜5 fps。

我测量fps忽略前10帧。下面是我的计算:只读="5.04fps",读imshow="4.97fps",读imshow写="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();
}

共有1个答案

薛文斌
2023-03-14

首先:

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

完成后,您可以检查真实的fps,并确定两个选项(显示或写入)中的哪一个减慢了您实现的fps速率。

请在不显示或写入图像的情况下发布已实现的fps速率的结果。

编辑:

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

在这种情况下,测量的时间是否与发布和调试构建不同?

编辑2:

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

另一件事:如果你不要求30帧,但可能要求20帧,那么测量的帧数会改变吗?

编辑3:

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

 类似资料:
  • 当我使用USB摄像头捕捉实时视频流时,我的C /OpenCV应用程序运行良好。 然而,当我将佳能5Dii与实时视频连接时,它找不到相机。 佳能实用程序可以很好地捕捉视频。 我应该使用VideoCapture帽(1)吗?

  • 硬件: 1.树莓派2 2.树莓派相机 软件: 1。OpenCV 2.4。11 2。用C语言编程 我有以下简单的代码,可以从摄像机捕获视频并在窗口中显示 帧大小始终为640 x 480,尝试更改帧的宽度和高度(如注释行所示)没有帮助,并且保持为640 x 480。 我正在寻找一种方法,将帧的宽度和高度从我的代码(而不是外壳)更改为1920 x 1080 如果可以通过OpenCV或V4l2驱动程序完成

  • 在OpenCV上使用class VideoCapture时如何旋转摄像头?(Android上的人脸检测示例)。我正在旋转画布: 但摄像机的图像并没有旋转:人脸检测不起作用。 摄像头从以下位置接收流: 我做了以下更新: 但这是行不通的。当我以portret方向运行程序时(在android设备上)——当我以横向方向运行程序时,程序不会启动——程序工作,但当我旋转设备时,程序工作,但显示屏上的图像不会旋

  • 我在Ubuntu 12.04 64位上使用OpenCV 2.4.5。我希望能够设置我的罗技C310网络摄像头输入的分辨率。相机支持高达1280x960在30fps,我能够在guvcview在这个分辨率查看视频。但是OpenCV总是以640x480的速度获取视频。 试图用cap更改分辨率。设置(CV\U CAP\U PROP\U FRAME\U WITH,1280)和CAP。创建视频捕获封盖后立即设

  • 我遇到的问题是,我无法更改OpenCV视频捕获的分辨率。不管怎样,分辨率总是640x480。我使用的代码是用C编写的,我使用的是opencv 3.4.8。我已经创建了一个超级简单的程序来做这件事,不管我怎么尝试,它似乎都不起作用。 以下是完整的代码: 当我运行上述代码时,帧总是640x480。 我已尝试使用

  • 我正试图从ip摄像机捕捉视频,并保存为avi视频文件。同时脚本将包含人脸的帧保存为jpeg文件。当脚本执行这些任务时,cpu使用率约为100%。正因为如此,我只想限制人脸检测的帧率。