Захваченное видео OpenCV работает быстрее, чем оригинальное видео с камеры! - PullRequest
3 голосов
/ 03 декабря 2010

Я использую 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 ]

3 голосов
/ 03 декабря 2010

Вы говорите автору, что он должен воспроизводиться со скоростью 30 кадров в секунду. Так что если вы на самом деле снимаете, скажем, 15 кадров в секунду, эти кадры будут воспроизводиться быстрее, чем в реальном времени.

Отображение захваченного изображения, ожидание нажатия клавиши и запись его в файл занимает все время. Вы должны учитывать это. Вы можете попытаться захватить видео заранее, измерить фактический FPS, а затем записать AVI, используя это значение.

1 голос
/ 03 декабря 2010

Вы также можете использовать cvGetCaptureProperty (CV_CAP_PROP_FPS), чтобы узнать у камеры, с какой частотой кадров она генерирует кадры, затем использовать 1000 / кадров в секунду вместо 33 в цикле задержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...