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

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

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

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

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


person Khashayar    schedule 28.02.2013    source источник


Ответы (2)


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

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

person cedrou    schedule 28.02.2013
comment
Да, поверьте мне, я погуглил это в любом направлении. но я не могу понять это. - person Khashayar; 28.02.2013

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

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

Importing the required packages:
import cv2
import numpy as np
Reading the image to be used:
filename = '1.jpg'
img = cv2.imread(filename)
cv2.imwrite('img.jpg',img)

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

Storing the height and width of the image in separate variables:
ih, iw, _ = img.shape
Creating a black window whose size is bigger than that of the image and storing its height and width in separate variables:
black = np.zeros((ih + 300, iw + 300, 3), np.uint8)
cv2.imwrite('black.jpg',black)
bh, bw, _ = black.shape

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

Storing the 4 corner points of the image in an array:
pts_src = np.array([[0.0, 0.0],[float(iw), 0.0],[float(iw), float(ih)],[0.0,float(ih)]])
Storing the 4 corner points of the trapezoid to be obtained:
pts_dst = np.array([[bw * 0.25, 0],[bw * 0.75, 0.0],[float(bw), float(bh)],[0.0,float(bh)]])
Calculating the homography matrix using pts_src and pts_dst:
h, status = cv2.findHomography(pts_src, pts_dst)
Warping the given rectangular image into the trapezoid:
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, вы сможете получить различные виды четырехугольников.

person Jeru Luke    schedule 20.01.2017