我有前视图片。我想把它变成鸟瞰图。 现在我想计算矩形中每个点(x,y)将在梯形中变换x,y的内容。
必须有一个给定x和y的变换公式以及梯形的角度(a)。
我在C中编程并使用opencv。
提前多多感谢。
答案 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)
将图像的高度和宽度存储在单独的变量中:
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
中的值,您将能够获得不同类型的四边形。