OpenCV предоставляет замечательную возможность не только просматривать видео, но так же и сохранять его в файл.
Для этого необходимо сначала инициализировать структуру редактора с помощью функции cvCreateVideoWriter(), в качестве параметров которой передаются название файла для сохранения видео, четырёх-буквенный код видео-кодека, размер кадра и частоту кадров.
Далее при получении кадра с камеры или очередной картинки из набора изображений — он записывается в файл с помощью функции cvWriteFrame(). И в конце — нужно не забыть освободить редактор функцией cvReleaseVideoWriter().
fps — астота кадров созданного видео потока
frame_size — размер кадра
is_color — определяет сохранять цветное изображение (1) или в градациях серого(0) (пока только под Windows)
Как я понял, она должна определять действительную частоту кадров (с fps=15 записанное видео у меня получается ускоренным).
Но после этого стало появляться исключение при инициализации редактора.
Вот такой printf:
printf(" fps: %f\n", fps);
сообщает
fps: 0.000000
Значит я неправильно вызываю cvGetCaptureProperty?
Не подскажете, как ей пользоваться правильно?
Господа, как решить проблему — видеофайл создается, имеет адекватный размер, но не проигрывается никакими плеерами (выдается ошибка — типа недопустимая операция). Пробовал указывать разные кодеки.
Во время записи видео пишется что-то типа такого: «compiler did not align stack variables...» и т.д. что компилятор не может скомпилить libavcodec и это проблема компилятора, а не кодека.
Подскажите, как решить проблему?
компилятор: VS2008, OpenCV 1.1 (так же пробовал с 1.0), OS Win7x64.
думаю, стоит попробовать более свежую версию библиотеки ;)
на данный момент — это 2.2 (в сборе она идёт под 2010-ю студию и чтобы заставить работать её под 2008-й её нужно пересобрать), но можете попробовать и
сам столкнулся с этой проблемой :(
OpenCV 2.1 при попытке записи видео выпадает :
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2
примечательно, что в OpenCV 2.0 запись отрабатывает на ура :)
Не получается сохранить видео.
Вчера скопипастил пример, запускаю
OpenCV Error: Unsupported format or combination of formats (cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 1.) in CvVideoWriter_FFMPEG::writerFrame, file /home/nefka/Загрузки/opencv/OpenCV-2.2.0/modules/highgui/src/cap_ffmpeg.cpp, line 1076
terminate called after throwing an instance of 'cv::Exception'
what(): /home/nefka/Загрузки/opencv/OpenCV-2.2.0/modules/highgui/src/cap_ffmpeg.cpp:1076: error: (-210) cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 1. in function CvVideoWriter_FFMPEG::writerFrame
Если делать, как написал Nefka 1 июня 2011, всё работает… НО!!!
В этом примере: CvCapture *var =…
А во всех предыдущих: CvCapture* var =…
Разница лишь в том, где * стоит после CvCapture, IplImage, char* и т д. Но если в этом примере
все CvCapture *, IplImage * и пр. изменить на CvCapture*, IplImage* и пр., уже ничего не работает, и вылазит ошибка
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler...,
уже упомянутая выше.
Win7 64
OpenCV 2.1
Я просто места себе не могу найти — никак не понимаю, ПОЧЕМУ оно так ((((((
Комментарии (10)
RSS свернуть / развернутьMur
Попробовал раскомментировать строку
Как я понял, она должна определять действительную частоту кадров (с fps=15 записанное видео у меня получается ускоренным).
Но после этого стало появляться исключение при инициализации редактора.
Вот такой printf:
сообщает
Значит я неправильно вызываю cvGetCaptureProperty?
Не подскажете, как ей пользоваться правильно?
Storm
noonv
Во время записи видео пишется что-то типа такого: «compiler did not align stack variables...» и т.д. что компилятор не может скомпилить libavcodec и это проблема компилятора, а не кодека.
Подскажите, как решить проблему?
компилятор: VS2008, OpenCV 1.1 (так же пробовал с 1.0), OS Win7x64.
jimm88
на данный момент — это 2.2 (в сборе она идёт под 2010-ю студию и чтобы заставить работать её под 2008-й её нужно пересобрать), но можете попробовать и
noonv
OpenCV 2.1 при попытке записи видео выпадает :
примечательно, что в OpenCV 2.0 запись отрабатывает на ура :)
noonv
Вчера скопипастил пример, запускаю
менял на не помогает.
Пересобрал ffmpeg и opencv, не помогло. ОС Ubuntu 10.04.
если закомментировать строку
и увеличить cvWaitKey() с 1 до 33, как впредыдущем прмимере, то видео показывает.
Nefka
Nefka
noonv
Если делать, как написал Nefka 1 июня 2011, всё работает… НО!!!
В этом примере: CvCapture *var =…
А во всех предыдущих: CvCapture* var =…
Разница лишь в том, где * стоит после CvCapture, IplImage, char* и т д. Но если в этом примере
все CvCapture *, IplImage * и пр. изменить на CvCapture*, IplImage* и пр., уже ничего не работает, и вылазит ошибка
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler...,
уже упомянутая выше.
Win7 64
OpenCV 2.1
Я просто места себе не могу найти — никак не понимаю, ПОЧЕМУ оно так ((((((
Заранее спасибо
romik9999
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.