openCV: можно ли синхронизировать cvQueryFrame с проектором?
Когда я снимаю изображения с камеры проецируемых изображений с помощью openCV через 'cvQueryFrame', у меня часто возникает непреднамеренный артефакт: линия сканирования проектора. То есть, поскольку я не могу точно определить время, когда cvQueryFrame захватывает изображение, полученное изображение не соответствует постоянному обновлению 30 Гц проектора. В результате эта типичная горизонтальная полоса знакома тем, кто включил видеокамеру на экран телевизора.
Если не считать аппаратной синхронизации, имел ли кто-нибудь какой-то успех с приблизительной (например, "достаточно хорошей") неформальной синхронизацией проектор-камера в openCV?
Ниже приведены два решения, которые я рассматриваю, но надеялся, что это достаточно распространенная проблема, чтобы могло существовать элегантное решение. Мои менее элегантные мысли:
Добавьте ползунок в cvWindow, отображающий видео для пользователя, чтобы управлять смещением синхронизации от 0 до 1/30-й секунды, затем установите таймер очереди на этот интервал. Всякий раз, когда нужен кадр, вместо непосредственного вызова cvQueryFrame, я бы запросил обратный вызов для выполнения cvQueryFrame при следующем срабатывании таймера. Таким образом, теоретически пользователь сможет использовать ползунок для уменьшения артефакта линии сканирования при условии, что разрешение таймера является достаточным.
После получения кадра через 'cvQueryFrame', проверьте кадр на контрольную горизонтальную полосу, ища дельту в значениях HSV для вертикального столбца пикселей. Естественно, это будет работать только тогда, когда фотографируемый объект содержит проверочную полосу однородного цвета при плавно меняющемся освещении.
Я использовал несколько камер с OpenCV, совсем недавно Canon SLR (7D).
2 ответа
Я не думаю, что предложенное вами решение будет работать. cvQueryFrame в основном копирует следующий доступный кадр из буфера драйвера камеры (или перемещает указатель в области отображения памяти, или что-то еще в соответствии с реализацией вашего драйвера).
В любом случае, синхронизация вызова cvQueryFrame не влияет на момент захвата изображения.
Итак, как вы и предполагали, аппаратная синхронизация - это действительно единственный маршрут, если у вас нет специальной камеры, такой как точечно-серая камера, которая дает вам явный программный контроль запуска запуска интеграции кадра.
Я знаю, что это не имеет ничего общего с синхронизацией, но вы пытались увеличить время экспозиции? Или сделать это путем намеренного "смешивания" двух или более изображений в одно?