我建议你使用 OpenCV透视变换 http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform方法,根据给定的图像获得所需的结果:
首先标记src点的位置:
src_pts = np.array([[8, 136], [415, 52], [420, 152], [14, 244]], dtype=np.float32)
假设您想将此车牌放入形状为 50x200 的矩阵中,因此目标点为:
dst_pts = np.array([[0, 0], [200, 0], [200, 50], [0, 50]], dtype=np.float32)
求透视变换矩阵为:
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warp = cv2.warpPerspective(img, M, (200, 50))
编辑:由于您不想对板的最终宽度和高度进行硬编码,因此为了使计算更加灵活,您可以根据 4 个标记点计算板的宽度和高度,如下所示:
def get_euler_distance(pt1, pt2):
return ((pt1[0] - pt2[0])**2 + (pt1[1] - pt2[1])**2)**0.5
src_pts = np.array([[8, 136], [415, 52], [420, 152], [14, 244]], dtype=np.float32)
width = get_euler_distance(src_pts[0][0], src_pts[0][1])
height = get_euler_distance(src_pts[0][0], src_pts[0][3])
dst_pts = np.array([[0, 0], [width, 0], [width, height], [0, height]], dtype=np.float32)
M = cv2.getPerspectiveTransform(src_pts, dst_pts)
warp = cv2.warpPerspective(img, M, (width, height))