В настоящее время я экспериментирую с opencv на платформе iOS. Идея состоит в том, чтобы захватить видеопоток, а затем найти изображение в этом потоке. Я правильно определяю изображение и хотел бы использовать гомографию между известным изображением и изображением на экране для преобразования CALayer, который содержит рамку для изображения (чтобы рамка рисовалась вокруг изображения).
Я рассчитал гомографию между двумя изображениями, используя findHomography. Я убедился, что эта гомография действительна, поскольку использование перспективыTransform для рисования границы вокруг изображения в cv::Mat дает мне идеальное выравнивание при масштабировании, перемещении и вращении камеры в 3D. Я хотел бы использовать гомографию для преобразования CALayer (Core Animation на iOS), чтобы нарисовать HUD поверх захваченного изображения. Это будет использоваться для пометки найденного изображения в канале камеры.
Я попытался использовать ответ Томми из Преобразование матрицы перспективы findHomography OpenCV в iOS CATransform3D, но это не сработало. На экране не отображалось изображение.
Я использую собственный подкласс CALayer, который просто рисует прямоугольник в своем фрейме. Я проверил это без преобразования, и это работает. Однако, когда я применяю сгенерированный CATransformation3D, на экране ничего не рисуется.
Я пытался отладить это, используя ответ Тома из Как получить вращение, перевод, сдвиг из матрицы гомографии 3x3 в C#, чтобы вычислить статистику гомографии, но это кажется странным: они дают вращение с шагом pi/2 и огромными масштабами величина. В то же время, перспективаTransform, кажется, отлично использует найденную матрицу гомографии.
Есть ли какое-то изменение в opencv 3.0, из-за которого ответы на два вышеуказанных вопроса перестали работать? Любая помощь приветствуется!