Вы можете попробовать работать с вращением и переводом матриц (или ротопереводной матрицей, комбинацией обоих), которые могут деформировать изображение по вашему желанию.Функция warpPerspective () использует аналогичный подход, поэтому у вас будет возможность заглянуть внутрь функции.
Подход:
Вы вычисляете матрицу,затем умножьте высоту и ширину исходного изображения, чтобы найти размеры выходного изображения.
Просмотрите все пиксели исходного изображения и умножьте их (x, y) координаты на матрицу.R (матрица вращения / перемещения / рото-перевода), чтобы получить координаты на выходном изображении (xo, yo).
Для каждой вычисленной координаты (xo, yo) назначьте значение изсоответствующая исходная координата изображения (x, y).
Интерполировать, используя медианный фильтр / билинейный / бикубический / и т. д.В этом методе иногда могут оставаться пустые точки
Однако если вы работаете в Python, ваша реализация может работать даже медленнее, чем warpPerspective (), поэтому вы можете рассмотреть C ++.Другое дело, что OpenCV использует компилятор C ++, и я совершенно уверен, что реализация warpPerspective () в OpenCV очень эффективна.
Итак, я думаю, что вы можете обойти warpPerspective (), однако я не уверен, что вы можете сделать это быстрее, чем в OpenCV без каких-либо улучшений (таких как GPU, мощный процессор и т. Д.):)
Удачи!