Для проекта компьютерного зрения, над которым я работаю, мне нужно захватить изображения с помощью веб-камеры Logitech C920. Я использую VideoCapture от OpenCV, но проблема, с которой я столкнулась, заключается в том, что изображение, которое я принимаю в определенный момент, не показывает последнюю вещь, которую видит камера. То есть, если я беру изображение в timestamp t, он показывает, что камера увидела в timestamp (t - delta), так сказать.Задержка OpenCV VideoCapture/V4L2 при захвате нового изображения веб-камеры
Я сделал это, написав программу, которая увеличивает счетчик и показывает его на экране. Я указал на камеру на экране и дал ей запись. Когда счетчик достиг определенного значения, скажем, 10000, он захватит изображение и сохранит его с именем файла «counter_value.png» (например, 10000.png). Таким образом, мне удалось сравнить текущее значение счетчика с текущим значением, наблюдаемым камерой. Я заметил, что большую часть времени задержка составляет около 4-5 кадров, но это не фиксированное значение.
Я видел похожие сообщения по этому вопросу, но ни один из них не помог. Некоторым людям рекомендуется поместить подпрограмму захвата кадров в отдельный поток и обновить переменную Mat_ current_frame. Я попробовал это, но по какой-то причине проблема все еще присутствует. Кто-то еще сказал, что камера хорошо работает в Windows (но мне нужно использовать Linux, хотя). Я попробовал запустить тот же код в Windows, и действительно, задержка составляла всего около 1 кадра (что также может быть, что камера не увидела счетчик, потому что экран не обновлялся достаточно быстро).
Тогда я решил запустить простой просмотрщик веб-камер, основанный только на коде V4L2, считая, что проблема может возникать из OpenCV. Я снова испытал такую же задержку, что заставляет меня поверить, что драйвер использует какой-то буфер для кэширования изображений.
Я новичок в V4L2 и мне действительно нужно, чтобы решить эту проблему как можно скорее, так что мои вопросы к вам, ребята являются:
- Кто-нибудь нашел решение для получения последнего изображения с помощью v4l2 (и возможно, OpenCV)?
- Если нет способа решить проблему с помощью V4L2, может ли кто-нибудь узнать другую альтернативу исправлению этой проблемы в Linux?
С уважением,
Михай