2009-07-22 139 views
2

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

我试图更改为25 fps的帧10和它的作品相当不错,但我敢肯定,这不是正确的过程:

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

的问题是,现在我已经来捕获与WebCam,但真正倾斜的程序是从连接到我的Mac的任何外部来源捕捉图像。

我使用这个代码捕获:

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

任何提示?我也在cvNamedWindow上显示摄像头输出,我该如何提高这个窗口的质量?

非常感谢大家!

Andrea!

回答

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 
+0

是太CPU密集型,或多或少90%,但问题也是cvShowImage(“捕获”,图像);从网络摄像头显示图像到一个窗口。 我试图在捕获过程中隐藏图像,但这并不能解决问题。每个mov文件都太快了。 如果我使用XCode示例捕捉视频,我没有这个问题。我正在使用gcc 4-0-1。 – 2009-07-24 15:42:53

1

我可以证实,10 fps的是标准的,但我相信这可能是因为你没有摄像头其捕获速度超过10 fps(这可能是问题)。

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

2

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

问题是,你都可以从相机每秒少帧,你写更多帧的视频文件

问候, 萨利赫。

2

我的表现跟你提到的差不多(约10fps),并且发现连续拨打retrieveFrame()的电话是永久占用的。我发现getCaptureProperty(CV_CAP_PROP_FPS)的默认值为0.我使用setCaptureProperty(CV_CAP_PROP_FPS,25.0)将此值更改为25,并且能够更快地捕获。