2012-01-04 111 views
1

我使用OpenCV中捕捉来自摄像机的视频和存储和avi文件,问题是,当我完成捕获和运行AVI文件,视频流看上去笨拙快...OpenCV捕获的视频运行速度比实时更快吗?

这里是代码

int isColor = 1; 
int frameW = 640; 
int frameH = 480; 
int fps  = 25; 

CvCapture* capture = cvCaptureFromCAM(0); 
assert(capture != NULL); 

cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE); 

CvVideoWriter *writer = cvCreateVideoWriter(
    "out.avi", 
    CV_FOURCC('M','J','P','G'), 
    fps, 
    cvSize(frameW,frameH), 
    isColor 
); 

IplImage* frame = cvQueryFrame(capture); 

while((frame = cvQueryFrame(capture)) != NULL) { 
    cvWriteFrame(writer, frame); 
    cvShowImage("Webcam", frame); 
    char c = cvWaitKey(33); 
    if (c == 27) break; 
} 

我不明白为什么当我在Windows 7 32位或64位和VS2008 &的OpenCV 2.3.1使用cvGetCaptureProperty(CV_CAP_PROP_FPS),这funcition荃返回0,那是假的,请帮帮我,谢谢

回答

0

cvSetCaptureProperty和cvGetCaptureProperty并不总是有效。另外,你有没有试过fps = 30?

同样值得注意的是,您需要以与捕获fps相同的fps播放视频。

+0

如何修复视频流看起来笨拙快速,如果我试过fps = 30,它会运行得非常快,我只是想让它像实时运行 – ALexF 2012-01-05 15:42:17

+1

你试过fps = 15和fps = 60吗?它有所作为吗? – 2012-01-05 16:25:13

+0

是啊,我understanded,我结合成功,我使用Commanline:ffmpeg.exe -i 1.wav -i 1.avi -acodec copy -vcodec copy output.avi但它有1个问题是:结合后,当我播放视频那么音频和视频不同步,例如:在视频显示之前发生的声音,如何同步音频和视频记录? – ALexF 2012-01-06 14:04:36

0

这是一个已知的问题,cvGetCaptureProperty不能正常工作,除非事先调用cvQueryFrame。

+0

不,它仍然失败,这是我的代码:cvQueryFrame(camera); \t double xxx = cvGetCaptureProperty(camera,CV_CAP_PROP_FPS); – ALexF 2012-01-05 15:39:22

相关问题