OpenCV. Вывод видео

    image

    Сегодня я вам покажу как вывести видео в нашем приложении при помощи OpenCV. Это так же легко, как и работа с изображением. Помимо прошлых действий нам потребуется сделать цикл, для чтения каждого кадра видео, так же нам потребуется команда, по который мы сможем выйти из этого цикла, если видео покажется слишком скучным.=)
    Приступим!


    #include “highgui.h”

    int main( int argc, char** argv )
    {
    cvNamedWindow( “AVI Video”, CV_WINDOW_AUTOSIZE );
    CvCapture* capture = cvCreateFileCapture( argv[1] );
    IplImage* frame;
    while(1)
    {
    frame = cvQueryFrame( capture );
    if( !frame ) break;
    cvShowImage( “AVI Video”, frame );
    char c = cvWaitKey(33);
    if( c == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( “AVI Video” );
    }


    image
    Результат работы программы (кадр из фильма «Трансформеры»).

    Функции которые мы рассматривли в прошлом уроке, в этом описываться не будут.

    CvCapture* capture = cvCreateFileCapture( argv[1] );
    Данная функция принимает в качестве аргумента параметр в котором мы передаём путь считываемого AVI файла и возвращает указатель на структуру CvCapture. Эта структура хранит всю информацию о AVI файле.

    frame = cvQueryFrame( capture );
    Внутри цикла while(1) мы начинаем считывание AVI файла. cvQueryFrame() принмает в качестве аргумента указатель на структуру CvCapture. И затем с каждым циклом заносит в память следующий кадр видео. Указатель возвращается на этот кадр.

    char c = cvWaitKey(33);
    if( c == 27 ) break;

    Когда мы отобразили очередной кадр, то мы ждём 33 миллисекунды (на самом деле вы можете поставить какую угодно задержку, но данная считается оптимальной для отображения 30 кадров в секунду, а 3 миллисекунды примите пока на веру:)) перед выводом следующего кадра. Если пользователь нажимает клавишу на клавиатуре, то функция cvWaitKey() передаёт переменной «с» ASCII код этой клавиши и если пользователь нажал Esc (ASCII 27), то тогда мы выходим из цикла, иначе проходит 33 мс и цикл продолжается.

    cvReleaseCapture( &capture );
    Так или иначе — цикл прервался (видео закончилось или была нажата клавиша Esc), тогда этой функцией мы высвобождаем память связанную со структурой CvCapture.
    Вот и всё! Немного позже я расскажу о том, как добавить в наше приложение slidebar, чтобы можно было перематывать видео.
    Удачи!;)
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 1

      0
      Добавил в «Избранное». Благодарю!

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.