OpenCV,捕获的视频比原始相机视频运行得更快!

时间:2010-12-03 16:25:00

标签: c++ opencv

我正在使用openCV从摄像头捕获视频并存储到avi文件,问题是当我完成捕获并运行avi文件时,视频流看起来很快......

这是代码

void main( )
{
CvCapture *capture = cvCaptureFromCAM( 0 );

int width = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH );
int height = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT );
CvVideoWriter *writer = cvCreateVideoWriter( "myCamCapture.avi",
-1,30, cvSize(  width, height ) );
cvNamedWindow("d", CV_WINDOW_AUTOSIZE);
IplImage *frame = 0;


while( 1 )
{
    frame = cvQueryFrame( capture );

    cvShowImage("d",frame);
    cvWriteFrame( writer, frame );
    char c = cvWaitKey( 33 );
    if( c == 27 ) break;
}

cvReleaseCapture( &capture );
cvReleaseVideoWriter( &writer );
cvDestroyWindow( "d" );


    }

请帮助

2 个答案:

答案 0 :(得分:3)

你告诉作者它应该以每秒30帧的速度播放。因此,如果您实际捕获的是每秒15帧,那么这些帧将比实时更快地播放。

显示捕获的图像,等待按键,并将其写入文件都需要时间。你需要考虑到这一点。您可以尝试预先捕获视频,在实际情况下测量实际FPS,然后使用该值编写AVI。

答案 1 :(得分:1)

您还可以使用cvGetCaptureProperty(CV_CAP_PROP_FPS)询问相机在生成帧时的帧速率,然后在延迟循环中使用1000 / fps而不是33。