我有一张正视图的图片,我想将它转换成鸟瞰图。现在我想计算矩形中每个点的变换后的梯形坐标(x,y)。
给定矩形中的x和y以及梯形的角度(a),必须有一个公式可用于进行此变换。
我正在使用C编程并使用OpenCV。
非常感谢提前。
![enter image description here](https://istack.dev59.com/iuPgB.webp)
我正在使用C编程并使用OpenCV。
非常感谢提前。
您有考虑过单应性变换吗?它可以用来创建或纠正图像中的透视,我认为这正是您想要的。
使用OpenCV,您可以使用方法cv::findHomography()。参数是4个初始点(矩形的顶点)和4个终点(梯形的顶点)。您将获得一个变换矩阵,然后可以将其与cv::warpPerspective()或cv::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
pts_src = np.array([[0.0, 0.0],[float(iw), 0.0],[float(iw), float(ih)],[0.0,float(ih)]])
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
中的值,就可以获得不同类型的四边形。