我正在使用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" );
}
请帮助
答案 0 :(得分:3)
你告诉作者它应该以每秒30帧的速度播放。因此,如果您实际捕获的是每秒15帧,那么这些帧将比实时更快地播放。
显示捕获的图像,等待按键,并将其写入文件都需要时间。你需要考虑到这一点。您可以尝试预先捕获视频,在实际情况下测量实际FPS,然后使用该值编写AVI。
答案 1 :(得分:1)
您还可以使用cvGetCaptureProperty(CV_CAP_PROP_FPS)询问相机在生成帧时的帧速率,然后在延迟循环中使用1000 / fps而不是33。