【问题标题】:OpenCV, captured video runs faster than original camera video!OpenCV,捕获的视频比原始相机视频运行得更快!
【发布时间】:2010-12-03 16:25:00
【问题描述】:

我正在使用 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" );


    }

请帮忙

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

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

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

    【讨论】:

    • 您的建议对我来说似乎是合理的,但您能否让我更清楚您的意思是什么:>
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2016-01-09
      • 2022-11-10
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多