IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> OpenCV синхронизацие времени видео, Коррекция длительности захватываемого видео с камеры
IGHOR
post 29.1.2010, 5:35
Post #1


Новичок
*

Группа: Пользователи
Сообщений: 4

Регистрация: 28.1.2010
Пользователь №: 700



Репутация:   0  


Я начал изучать OpenCV недавно, очень понравилось,
но я столкнулся с проблемой, захватываю видео с камеры а в результате получается видео с рассинхронным временем,
оно длиннее/короче за реальное время записи.
Вот пример кода:

...
CvVideoWriter *cvVideoWriter=cvCreateVideoWriter("video.avi",CV_FOURCC('f', 'f', 'd', 's'),25,cvSize(320,240),1);
...
while(true)
{
c_frame = cvQueryFrame(capture);
...
cvWriteFrame(cvVideoWriter,c_frame);
...
if(cvWaitKey(40)>=0)break;
}


в результате получается алгоритм:
цикл
{
захват картинки
обработка картинки
запись видео кадра
пауза 40 мс
}

в идеале задержка 40 мс дает ровно 25 кадров, но на захват обработку и сохранение тоже уходит время,
в результате получается задержка между кадрами 40мс+обработка == неопределенное время задержки которое зависит от загрузки цпу а значит и неверно рассчитвыается FPS
в результате видео записывается ровно в 25 кадров, но длительность видео не совпадает с реально записанным временем.
Скажите как разобраться в этом, как обрабатывается нормализация продолжительности видео?
Перейти в начало страницы
 
+Цитировать сообщение
Smorodov
post 31.1.2010, 12:12
Post #2


Администратор
***

Группа: Главные администраторы
Сообщений: 507

Регистрация: 29.4.2009
Пользователь №: 1



Репутация:   7  


Видимо здесь нужно снять статистику по скорости работы программы, замерив среднее время цикла, а потом, исходя из полученных результатов, задавать задержку в параметре framerate.

Для замеров времени можно использовать код, находящийся в архиве:

Attached File  duration_demo.zip ( 2,6 килобайт ) Number of downloads: 9

Attached File  duration_src.zip ( 495 байт ) Number of downloads: 7


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
IGHOR
post 2.2.2010, 6:01
Post #3


Новичок
*

Группа: Пользователи
Сообщений: 4

Регистрация: 28.1.2010
Пользователь №: 700



Репутация:   0  


Smorodov, спасибо, попробую, но если вычесть среднее значение а видео надо снимать много чесов подряд при том нагрузка ЦП может быть разная и от этого будет меняться задержка,
неужели никто с таким не сталкивался? все примеры что нахожу в инете без учитывания такой задержки, странно в общем, буду пробовать
Перейти в начало страницы
 
+Цитировать сообщение
Smorodov
post 2.2.2010, 13:39
Post #4


Администратор
***

Группа: Главные администраторы
Сообщений: 507

Регистрация: 29.4.2009
Пользователь №: 1



Репутация:   7  


Есть еще вариант, захватывать и записывать кадры не в цикле, а по прерыванию мультимедиа таймера, он достаточно точно отмеряет интервалы, в отличие от обычного системного таймера, однако интервал должен быть взят с запасом, т.к. приоритет м.м. таймера достаточно высокий, и если функция прерывания будет требовать больше времени, чем интервал таймера, произойдет зависание системы.


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
IGHOR
post 2.2.2010, 15:42
Post #5


Новичок
*

Группа: Пользователи
Сообщений: 4

Регистрация: 28.1.2010
Пользователь №: 700



Репутация:   0  


Цитата(Smorodov @ 2.2.2010, 12:39) *
Есть еще вариант, захватывать и записывать кадры не в цикле, а по прерыванию мультимедиа таймера, он достаточно точно отмеряет интервалы, в отличие от обычного системного таймера, однако интервал должен быть взят с запасом, т.к. приоритет м.м. таймера достаточно высокий, и если функция прерывания будет требовать больше времени, чем интервал таймера, произойдет зависание системы.


Спасибо, такой вариант хороший, думаю если устроить Frame Skipping то ничего зависать не будет.
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Текстовая версия Сейчас: 8.9.2010, 23:36
Design by: Invision Skins & Anonymous Proxy