Я борюсь с этой проблемой:
У меня есть изображение, и я хочу применить к нему перспективу деформации (у меня уже есть матрица преобразования), но вместо вывода, имеющего только область преобразования (как в примере ниже), я хочу иметь возможность видеть все изображение вместо ,
ПРИМЕР http://docs.opencv.org/trunk/_images/perspective.jpg
Вместо области преобразования, как в этом примере, я хочу преобразовать все исходное изображение.
Как мне этого добиться?
Спасибо!
Кажется, что вы вычисляете перспективное преобразование, выбирая углы сетки судоку во входном изображении и запрашивая их деформацию в фиксированном месте в выходном изображении. В вашем примере кажется, что вы запрашиваете деформацию верхнего левого угла в координатах (0,0), в верхнем правом углу в (300,0), в нижнем левом углу в (0,300) и нижнем нижнем углу. прямо на (300 300).
Это всегда приводит к обрезке области изображения слева от двух левых углов и над двумя верхними углами (то есть области изображения, где х<0 или у<0 в выходном изображении). Кроме того, если вы укажете размер выходного изображения 300×300, это приведет к обрезке области изображения справа направо и под нижними углами.
Если вы хотите сохранить все изображение целиком, вам нужно использовать разные выходные координаты для углов. Например, деформируйте TLC до (100, 100), TRC до (400,100), BLC до (100,400) и BRC до (400,400) и укажите, например, размер выходного изображения 600×600.
Вы также можете рассчитать оптимальные координаты следующим образом:
Таким образом, вам гарантировано, что:
Однако это создаст черные области, поскольку выходное изображение больше не является идеальным прямоугольником, поэтому некоторые пиксели в выходном изображении не будут иметь никакого соответствия во входном изображении.
Изменить 1: Если вы хотите заменить черные области чем-то другим, вы можете инициализировать матрицу назначения по своему желанию, а затем установить borderMode
параметр warpPerspective
функция к BORDER_TRANSPARENT
,