У меня есть фотография с переднего вида. и я хочу превратить это в вид с высоты птичьего полета.
Теперь я хочу вычислить для каждой точки в прямоугольнике (x, y), что будет преобразовано x, y в трапецию.
должна быть формула для этого преобразования с заданными x и y, а также углом трапеции (a).
Я программирую на C и использую opencv.
Заранее большое спасибо.
Вы рассматривали гомография преобразования. Вы используете это, чтобы создать или исправить перспективу в изображении, я думаю, что это именно то, что вы хотите.
С OpenCV вы можете использовать метод резюме :: findHomography (). Аргументами являются 4 начальные точки (вершины вашего прямоугольника) и 4 конечные точки (вершины трапеции). Вы получаете матрицу преобразования, которую затем можете использовать с резюме :: warpPerspective () или же резюме :: perspectiveTransform ().
Я смог найти способ решить вашу проблему.
Вот код, который я использовал для того же:
Импорт необходимых пакетов:
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
Вы сможете получить различные виды четырехугольников.