我使用OpenCV将透视图转换为平面图像。在示例中,我发现它可以完美工作,并且当我使用简单角度时,它可以工作。 (example 1)
但是在我的情况下,当我需要对标记图像位置使用不同的角度时,我需要进行变换,这会使图像变形。 (example 2)
如何修复它并获得图像-不重要我使用什么角度?
points = []
for i in range(0, 4):
point = cv2.selectROI('Select speed', frame)
points.append((point[0], point[1]))
widthA = np.sqrt(((points[0][0] - points[1][0]) ** 2) + ((points[0][1] - points[1][1]) ** 2))
heightA = np.sqrt(((points[1][0] - points[2][0]) ** 2) + ((points[1][1] - points[2][1]) ** 2))
widthB = np.sqrt(((points[2][0] - points[3][0]) ** 2) + ((points[2][1] - points[3][1]) ** 2))
heightB= np.sqrt(((points[3][0] - points[0][0]) ** 2) + ((points[3][1] - points[0][1]) ** 2))
maxWidth = max(int(widthA), int(widthB))
maxHeight = max(int(heightA), int(heightB))
dst_def = np.array([[0, 0],
[maxWidth-1, 0],
[maxWidth-1, maxHeight-1],
[0, maxHeight-1]], dtype='float32')
points = np.array(points, dtype = "float32")
m = cv2.getPerspectiveTransform(order_points(points), dst_def)
warped = cv2.warpPerspective(frame, m, (maxWidth, maxHeight))
cv2.imshow('Image', warped)
cv2.waitKey(0)