openCV: можно ли синхронизировать cvQueryFrame с проектором?

Когда я снимаю изображения с камеры проецируемых изображений с помощью openCV через 'cvQueryFrame', у меня часто возникает непреднамеренный артефакт: линия сканирования проектора. То есть, поскольку я не могу точно определить время, когда cvQueryFrame захватывает изображение, полученное изображение не соответствует постоянному обновлению 30 Гц проектора. В результате эта типичная горизонтальная полоса знакома тем, кто включил видеокамеру на экран телевизора.

Если не считать аппаратной синхронизации, имел ли кто-нибудь какой-то успех с приблизительной (например, "достаточно хорошей") неформальной синхронизацией проектор-камера в openCV?

Ниже приведены два решения, которые я рассматриваю, но надеялся, что это достаточно распространенная проблема, чтобы могло существовать элегантное решение. Мои менее элегантные мысли:

  • Добавьте ползунок в cvWindow, отображающий видео для пользователя, чтобы управлять смещением синхронизации от 0 до 1/30-й секунды, затем установите таймер очереди на этот интервал. Всякий раз, когда нужен кадр, вместо непосредственного вызова cvQueryFrame, я бы запросил обратный вызов для выполнения cvQueryFrame при следующем срабатывании таймера. Таким образом, теоретически пользователь сможет использовать ползунок для уменьшения артефакта линии сканирования при условии, что разрешение таймера является достаточным.

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

Я использовал несколько камер с OpenCV, совсем недавно Canon SLR (7D).

2 ответа

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

В любом случае, синхронизация вызова cvQueryFrame не влияет на момент захвата изображения.

Итак, как вы и предполагали, аппаратная синхронизация - это действительно единственный маршрут, если у вас нет специальной камеры, такой как точечно-серая камера, которая дает вам явный программный контроль запуска запуска интеграции кадра.

Я знаю, что это не имеет ничего общего с синхронизацией, но вы пытались увеличить время экспозиции? Или сделать это путем намеренного "смешивания" двух или более изображений в одно?

Другие вопросы по тегам