【问题标题】:OpenCV Video capture and fps problemOpenCV视频捕获和fps问题
【发布时间】:2010-11-13 04:24:59
【问题描述】:

我在 MacOSX 上使用 OpenCV 从我的网络摄像头捕捉视频。它工作正常,但是当我尝试在 QuickTime 上播放我捕获的视频时,它播放得太快了。即我从相机捕捉 10 秒,但是当我在 QuickTime 上播放时,视频是 2 秒。

我尝试将 fps 从 25 更改为 10,效果很好,但我确信这不是正确的过程:

CvVideoWriter *writer = 0;  
int isColor = 1;
int fps     = 25;
int frameW  = 640; // 744 for firewire cameras
int frameH  = 480; // 480 for firewire cameras

问题是现在我必须使用网络摄像头进行捕捉,但程序的真正目的是从连接到我的 Mac 的任何外部源捕捉图像。

我正在使用这段代码来捕获:

for (;;) {
  cvGrabFrame(capture)
  image = cvRetrieveFrame(capture);
  cvWriteFrame( writer, image );
}

有什么提示吗?我还在 cvNamedWindow 上显示网络摄像头输出,如何提高此窗口的质量?

非常感谢大家!

安德烈亚!

【问题讨论】:

    标签: c performance macos opencv


    【解决方案1】:

    可能是压缩捕获的视频并将其保存到文件中占用过多 CPU。如果是这种情况,那么您实际上只能在 cvNamedWindow 中看到 10 FPS,并且只有 10 FPS 被写入文件。在文件中指定 25 FPS 自然会加快播放速度。

    要查看这是否真的是您的问题,您可以尝试仅将图像数据保存在内存中。我还没有尝试过,但我认为您可以使用 cvCloneImage() 来实现。

    您也可以尝试使用 CPU 开销较低的其他格式来保存您的视频:

    CV_FOURCC('P','I','M','1')    = MPEG-1 codec
    CV_FOURCC('M','J','P','G')    = motion-jpeg codec (does not work well)
    CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
    CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
    CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
    CV_FOURCC('U', '2', '6', '3') = H263 codec
    CV_FOURCC('I', '2', '6', '3') = H263I codec
    CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
    

    【讨论】:

    • 是的 CPU 太密集了,差不多 90% 但问题也是 cvShowImage( "Capture", image );将来自网络摄像头的图像显示到窗口中。我试图在捕获过程中隐藏图像,但这并不能解决问题。每个mov文件都太快了。如果我使用 XCode 示例来捕获视频,我就没有这个问题。我正在使用 gcc 4-0-1。
    【解决方案2】:

    cvCreateVideoWriter(filename, fourcc, fps, frame size, is color)fps = 10fps = 20 和不同的值一起使用。如果您已经知道来自相机的帧的 fps 值,请使用它。

    问题是您从相机获得的每秒帧数较少,而您正在向视频文件写入更多帧

    问候, 萨利赫。

    【讨论】:

      【解决方案3】:

      我的性能与您提到的相似(大约 10 fps),并发现连续的 retrieveFrame() 呼叫一直持续。我发现 getCaptureProperty(CV_CAP_PROP_FPS) 的默认值为 0。我使用 setCaptureProperty(CV_CAP_PROP_FPS,25.0) 将此值更改为 25,并且能够更快地捕获。

      【讨论】:

        【解决方案4】:

        我确认 10 fps 是标准的,但我认为这可能是因为您没有以超过 10 fps 的速度拍摄的相机(这可能是问题所在)。

        这还是很奇怪,因为我用的是waitkey(30),应该是33fps,但正好是10。

        【讨论】:

          猜你喜欢
          • 2012-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-28
          相关资源
          最近更新 更多