2

我在 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 上显示网络摄像头输出,如何提高此窗口的质量?

非常感谢大家!

安德烈亚!

4

4 回答 4

2

可能是压缩捕获的视频并将其保存到文件中占用过多 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
于 2009-07-22T22:58:04.700 回答
2

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

于 2012-08-28T04:45:57.623 回答
2

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

问题是您每秒从相机获得的帧数减少,并且您将更多帧写入视频文件

问候,萨利赫。

于 2012-01-23T09:59:11.987 回答
1

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

这仍然很奇怪,因为我使用waitkey(30)的是 ,应该是33fps,但它恰好是 10。

于 2010-03-17T11:37:24.810 回答