2010-12-03 138 views
3

我使用OpenCV中捕捉來自攝像機的視頻和存儲和avi文件,問題是,當我完成捕獲和運行AVI文件,視頻流看上去笨拙快...OpenCV,捕獲的視頻比原始攝像機視頻運行得更快!

這裏是代碼

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"); 


    } 

請幫助

回答

3

你告訴筆者,它應該以每秒30幀播放。因此,如果您實際捕捉的速度是每秒15幀,那麼這些幀將比實時更快地播放。

顯示捕獲的圖像,等待按鍵,並將其寫入文件都需要時間。你需要說明這一點。您可以嘗試預先捕獲視頻,在發生時測量實際FPS,然後使用該值編寫AVI。

+0

您的建議對我來說似乎合理,但是您能否更清楚地表達您的意思:「您可以嘗試先捕獲視頻,在發生時測量實際的FPS,然後使用該視頻編寫AVI值。>> – 2010-12-03 17:16:43

1

您還可以使用cvGetCaptureProperty(CV_CAP_PROP_FPS)來詢問攝像機在幀生成幀的幀率,然後在延遲循環中使用1000/fps而不是33。