2012-01-26 4 views
3

Я заметил странную вещь о OpenCV. Я использовал одну из базовых программ С примера, поставляемых с OpenCV, чтобы показать вывод камеры на экране. Я, однако, вижу выход на экране с небольшой задержкой по сравнению с тем, что видит камера. Поэтому, если я двигаю рукой перед камерой, она будет отображаться на экране с задержкой в ​​0,1 секунды. Мы разрабатываем приложение, которое очень чувствительно к этим задержкам. Есть ли способ удалить эту задержку, так что передача изображения мгновенно? Я не вижу крошечной задержки, например, когда я смотрю на вывод своей камеры через Skype.Задержка OpenCV на выходе камеры на экране

спасибо! P.

+0

Какое окончательное разрешение вывода? И как это соотносится с разрешением skypes? Не могли бы вы указать, какой образец? Какую операционную систему ты используешь? –

+1

Скорее всего, вам придется писать собственную, высоко оптимизированную библиотеку для немедленного захвата камеры. Простые драйверы, например, используемые в OpenCV, имеют встроенную задержку. – Sam

+0

. Платформа - это 64-разрядная версия Windows 7. Выходное разрешение 640x480. Код примера тривиален. Он называется camera.py и находится в каталоге samples для python. Я не знаю количественной разницы между скоростью вывода из Skype и OpenCV, но я вижу, просто глядя на видео и быстро двигая рукой, чтобы, когда я выводил видео через imshow() в opencv, я получаю задержка около 0,1 секунды, но практически без задержки в выходе камеры Skype. Если у драйверов OpenCV есть задержка, то это проблема с OpenCV, и нам придется менять технологию. Спасибо за помощь! – pkout

ответ

4

Окно дисплея OpenGV highgui предназначено только для простого отображения результатов обработки изображений - оно не оплотировано для высокой производительности или низкой латентности.

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

+0

Спасибо за ответ. Итак, если я сохраняю вывод видео в файл вместо вывода его на экран, вообще не будет никакой задержки? Думаете, это сработает? Мне не нужно показывать это на экране. Мне нужно, чтобы изображение обрабатывалось практически мгновенно. Это все, что имеет значение. Благодаря! – pkout

+0

Videoinput lib довольно хорош, хотя это зависит от того, какие фильтры directshow используются. Если у вас относительно небольшие изображения, то современный ПК может выполнять большую обработку по каждому в режиме реального времени при низкой частоте кадров. Если вам нужно выполнить сложную обработку изображения 1920x1080p со скоростью 60 кадров в секунду, это сложнее! –

+0

Камера работает с разрешением 640x480 пикселей, и я намеренно не выполняю обработку изображений. Я просто просматриваю кадры с камеры и показываю их на своем экране с помощью cv :: imshow(). Поэтому, если какая-либо обработка сделана, все, что необходимо, чтобы получить изображение, отображаемое на экране. Тем не менее, это крошечная задержка. Эта задержка не происходит с другим программным обеспечением. Надеюсь, это проблема с библиотекой highgui, которая недостаточно быстро отображает фреймы. Благодаря! – pkout

1

Просто для подтверждения - да, когда я выключил видеовыход highgui, скорость обработки значительно увеличилась и FPS вместе с ним. Теперь приложение способно получать и обрабатывать кадры с частотой 80 FPS. Одним из решений подобных проблем, который не требует записи новой видеовыходной библиотеки, является отображение всего, скажем, десятого кадра видео для экономии вычислительной мощности.

Thanks

+1

еще один фактор, который большинство людей не знает, но вызывает большие проблемы для нас - внутренняя электроника на ЖК-дисплее часто имеет задержку в 3-4 кадра (@ 60 кадров в секунду), давая заметное отставание, если вы пытаетесь сделать точный ручной режим, глазные задачи –

+0

Хмм, я не знал об этом. Спасибо, что поделился. Было бы полезно знать в будущем. – pkout

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