Edit:
После дополнительной работы над этим я узнал несколько вещей:
После того, как вы обнаружите свою гомографию между img1 и img2 и, следовательно, получите матрицу преобразования от 1 до 2, вы почти готовы запустить cvWarpPerspective.
Во-первых, вам нужно дополнить img1. Вы должны быть в состоянии получить ограничивающую рамку для img1 довольно легко. Создайте новый img размером boundingBox-> width + img2-> width * 2, boundingBox-> height + img2-> height * 2 и cvCopy img 1 в середину.
Если вы сейчас попробуете cvWarpPerspective, ваше преобразование будет отключено, потому что вы перевели img1. Нам нужно сделать еще одну матрицу для учета этого перевода. Если вы поместили img1 в середине составного изображения, то поместите его в верхний левый угол в (img2-> width, img2-> height). Сделать матрицу перевода = {1,0, img2-> ширина, 0,1, img2-> высота, 0,0,0). Теперь используйте cvMatMul (перевод, гомография, результирующий), чтобы получить окончательную матрицу преобразования.
Теперь вы готовы использовать cvWarpPerspective, используя составное изображение размером> и вашу результирующую матрицу для деформации изображения 1.
Еще предстоит проделать еще кое-какую работу для сшивания, но это решит вашу проблему искаженного изображения, выходящего из видимой области. Чтобы завершить сшивание, вам, вероятно, понадобится вставить image2 на составное изображение, создать маску для искаженного изображения, а затем скопировать искаженное изображение на составное изображение2, используя эту маску, чтобы получить хорошо выглядящее сшитое изображение.