Маркеры, которые я использовал для ProCamCalib , должны обнаруживаться более надежно, чем шаблон шахматной доски.Вы можете использовать ARToolkitPlus как с ProCamCalib, но есть и другие альтернативы, или вы можете сделать свой собственный маленький детектор.:) Затем, с обнаруженными угловыми координатами маркеров, мы можем калибровать таким же образом, используя остальные функции калибровки OpenCV.
И я тоже могу делать с ним классные вещи, как показано настраница ProCamTracker .
РЕДАКТИРОВАТЬ: Теперь, когда я лучше понимаю вопрос, мы можем сделать это для статичных сцен довольно легко, хотя OpenCV нам не сильно поможет.Сначала мы помещаем камеру в положение, из которого мы бы хотели, чтобы зритель увидел исправленную проекцию.Затем мы проецируем двоичные шаблоны (которые выглядят как локально мигающие точки) и собираем изображения этих шаблонов точек.(Мы можем сделать их более плотными, пока они не превратятся в столбики, метод, известный как структурированный свет.) После обнаружения изображений с камеры и декодирования этих точек в двоичные коды мы получаем пиксельные соответствия проектора камеры <->, а также некоторое количество вершин.во всяком случае, и оттуда это 100% графика.Вот статья, в которой эти шаги рассматриваются более подробно:
Zollmann, S., Langlotz, T. and Bimber, O.
Пассивно-активная геометрическая калибровка для зависимых от вида проекций на произвольные поверхности
http://140.78.90.140/medien/ar/Pub/PAGC_final.pdf
Демонстрационное видео: http://140.78.90.140/medien/ar/Pub/PAGC.avi
РЕДАКТИРОВАТЬ 2: проецируя какой-то шаблон, мы можем определить координаты пикселей в изображении проектора, которые соответствуют данному пикселю в изображении с камеры,Мы часто используем временные точечные шаблоны, потому что их легко обнаружить и декодировать ... И на самом деле, OpenCV может пригодиться для этого.То, как я думаю, я бы попытался сделать это, пойдет примерно так.Давайте возьмем только 2 бита для простоты.Таким образом, у нас есть четыре изображения: 00, 01, 10 и 11. Так как мы контролируем изображение проектора, мы знаем их, но мы должны найти их и в изображении с камеры.Сначала я возьму последнее (камера) изображение 11 и вычту его из первого (камеры) изображения 00, используя cvAbsDiff (), затем оцифрую результат с помощью cvThreshold () и найду контуры (или пятна) в двоичном файле.изображение с помощью cvFindContours ().Мы должны убедиться, что каждый контур имеет соответствующую область с помощью cvContourArea (), в то время как мы можем найти его центроид с помощью cvMoments ().Тогда мы можем начать делать вещи с другими изображениями.Для каждого контура я бы попытался использовать cvBoundingRect () для cvCountNonZero () пикселей в других (также бинаризованных с помощью cvThreshold () camera) изображениях внутри этих ограничивающих прямоугольников, которые мы можем установить с помощью cvSetImageROI ().Если ненулевое число велико, это должно быть зарегистрировано как 1, если нет, то 0.
Как только у вас есть все биты, у вас есть код, и все готово.