2015-05-03 4 views
-3

Эта программа захватывает видео до тех пор, пока я не нажму Esc. Но мне нужно изменить эту программу и захватить видео в течение 30 секунд.Ошибка при захвате видео в течение заданного периода времени

После записи видео он воспроизводится очень быстро и длина видео уменьшается. Я попытался добавить waitKey в конец, но он все еще не работает. После записи длина видео должна быть одинаковой. Как я могу это сделать? Какие-либо предложения?

int main(int argc, const char** argv) 
{ 
    using namespace std; 
    using namespace cv; 
VideoCapture cap(0); 

    while(!(cap.isOpened() && cap.grab())) 
    { 
cout << "Camera not ready" << endl; 
    } 
VideoWriter Writer("D:/MyVideo.avi", CV_FOURCC('P','I','M','1'),20,Size(640,480), true); 


    while (waitKey(30)!= 27) 
      { 
       Mat frame; 
       cap >> frame; 
       Writer.write(frame); 
       imshow("D:/MyVideo", frame); 
      } 

} 

ответ

0
int64 t0 = cv::getTickCount(); 
while (waitKey(30)!= 27) 
{ 
    Mat frame; 
    cap >> frame; // read a new frame from video 
    Writer.write(frame); //writer the frame into the file 
    double t = (cv::getTickCount() - t0)/cv::getTickFrequency(); 
    if (t > 30) 
     break; 
    ... 
    // now, we need to adjust to the desired framerate of 20fps, 
    // so we need to sleep for 1000/20 = 50 milliseconds 
    // either have a window, and use waitKey(): 
    // imshow("lalala", frame); 
    // waitKey(50); 
    // or just sleep(), unfortunately system dependant ;(
    // win: 
    // Sleep(50); 
    // linux, etc.: 
    // usleep(50); 
} 
+1

Большое спасибо @berak –

+0

прогонах программы 30-х годов, но при воспроизведении записанного видео его очень быстро и только 10s. Могу ли я помочь исправить это? –

+0

^^ см. Редактирование – berak

Смежные вопросы