将矩形转换为梯形以获得透视

时间:2013-02-28 16:47:24

标签: c++ math opencv perspective

我有前视图片。我想把它变成鸟瞰图。 现在我想计算矩形中每个点(x,y)将在梯形中变换x,y的内容。 enter image description here

必须有一个给定x和y的变换公式以及梯形的角度(a)。

我在C中编程并使用opencv。

提前多多感谢。

2 个答案:

答案 0 :(得分:5)

您是否考虑过homography转换。您可以使用它来创建或更正图像中的透视图,我认为这正是您想要的。

使用OpenCV,您可以使用方法cv::findHomography()。参数是4个初始点(矩形的顶点)和4个最终点(梯形的顶点)。您将获得一个转换矩阵,然后可以将其与cv::warpPerspective()cv::perspectiveTransform()一起使用。

答案 1 :(得分:1)

我能找到解决问题的方法。

以下是我用于相同的代码:

导入所需的包:
import cv2
import numpy as np
读取要使用的图像:
filename = '1.jpg'
img = cv2.imread(filename)
cv2.imwrite('img.jpg',img)

enter image description here

将图像的高度和宽度存储在单独的变量中:
ih, iw, _ = img.shape
创建一个黑色窗口,其大小大于图像的大小,并将其高度和宽度存储在单独的变量中:
black = np.zeros((ih + 300, iw + 300, 3), np.uint8)
cv2.imwrite('black.jpg',black)
bh, bw, _ = black.shape

enter image description here

将图像的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_srcpts_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)

enter image description here

cv2.waitKey(0)
cv2.destroyAllWindows()

如果更改数组pts_dst中的值,您将能够获得不同类型的四边形。