Преобразовать прямоугольник в трапецию для перспективы

У меня есть фотография с переднего вида. и я хочу превратить это в вид с высоты птичьего полета.
Теперь я хочу вычислить для каждой точки в прямоугольнике (x, y), что будет преобразовано x, y в трапецию.
введите описание изображения здесь

должна быть формула для этого преобразования с заданными x и y, а также углом трапеции (a).

Я программирую на C и использую opencv.

Заранее большое спасибо.

4

Решение

Вы рассматривали гомография преобразования. Вы используете это, чтобы создать или исправить перспективу в изображении, я думаю, что это именно то, что вы хотите.

С OpenCV вы можете использовать метод резюме :: findHomography (). Аргументами являются 4 начальные точки (вершины вашего прямоугольника) и 4 конечные точки (вершины трапеции). Вы получаете матрицу преобразования, которую затем можете использовать с резюме :: warpPerspective () или же резюме :: perspectiveTransform ().

5

Другие решения

Я смог найти способ решить вашу проблему.

Вот код, который я использовал для того же:

Импорт необходимых пакетов:

import cv2
import numpy as np

Чтение изображения, которое будет использоваться:

filename = '1.jpg'
img = cv2.imread(filename)
cv2.imwrite('img.jpg',img)

введите описание изображения здесь

Хранение высоты и ширины изображения в отдельных переменных:

ih, iw, _ = img.shape

Создание черного окна, размер которого больше размера изображения, и сохранение его высоты и ширины в отдельных переменных:

black = np.zeros((ih + 300, iw + 300, 3), np.uint8)
cv2.imwrite('black.jpg',black)
bh, bw, _ = black.shape

введите описание изображения здесь

Хранение 4 угловых точек изображения в массиве:

pts_src = np.array([[0.0, 0.0],[float(iw), 0.0],[float(iw), float(ih)],[0.0,float(ih)]])

Хранение 4 угловых точек трапеции, которые будут получены:

pts_dst = np.array([[bw * 0.25, 0],[bw * 0.75, 0.0],[float(bw), float(bh)],[0.0,float(bh)]])

Вычисление матрицы гомографии с использованием pts_src а также pts_dst:

h, status = cv2.findHomography(pts_src, pts_dst)

Деформация данного прямоугольного изображения в трапецию:

im_out = cv2.warpPerspective(img, h, (black.shape[1],black.shape[0]))
cv2.imwrite("im_outImage.jpg", im_out)

введите описание изображения здесь

cv2.waitKey(0)
cv2.destroyAllWindows()

Если вы измените значения в массиве pts_dst Вы сможете получить различные виды четырехугольников.

1

По вопросам рекламы [email protected]