Сшивание изображений с помощью openCV - сложность последнего этапа

Я использую OpenCV 2.4 для преобразования видео в длинную (узкую) мозаику. Это мой первый раз, когда я использую OpenCV, но до сих пор мне удалось с некоторым успехом:

  1. Получить кадры из видео.
  2. Получите дескрипторы ключевых точек с помощью SIFT.
  3. Отсортируйте выбросы с помощью RANSAC
  4. Найдите матрицу гомографии.

Проблема заключается в том, что я применяю матрицу гомографии к одному из кадров/изображений и пытаюсь создать мозаику. Иногда я получаю сообщение об ошибке, жалующееся на то, что размер целевой матрицы для warpPerspective() слишком мал. Чтобы обойти это, я думаю, что слишком большой размер, чтобы убедиться, что результат подходит. Однако после того, как копии кадров были объединены вместе, у меня есть огромное изображение, которое в основном черное. Итак, мой вопрос: как я могу сделать это по-умному? Как я могу рассчитать размер матрицы назначения, которая мне понадобится для мозаики, ДО того, как я передам ее в warpPerspective()? Я пробовал что-то с ROI/Rect, но я не совсем уверен, что я с этим делаю.

Если у вас есть какие-либо предложения, я был бы бесконечно благодарен.


person Community    schedule 22.10.2012    source источник
comment
Когда именно warpPerspective говорит, что размер слишком мал? Он способен деформировать изображение в матрицу, которая недостаточно велика, чтобы полностью вместить изображение. Вот пример (см. изображение внизу ответа)   -  person Hammer    schedule 23.10.2012
comment
Было бы полезно добавить более конкретную информацию. Скриншот, небольшой фрагмент кода, иллюстрирующий вашу проблему и т. д.   -  person Hammer    schedule 23.10.2012
comment
Почему вы не используете модуль сшивания в OpenCV?   -  person Sam    schedule 23.10.2012


Ответы (1)


примените матрицу гомографии к точкам, представляющим крайние точки вашего кадра изображения: (0,0,1); (w,0,1) и т. д. Это даст вам границы вашего нового изображения.

person Owen    schedule 19.11.2012