具有相同矩阵的透视不同

时间:2018-07-12 20:52:53

标签: python numpy opencv

当使用opencv2和Python 2.7时,我在特定图像上调用函数warpPerspective,它为我提供了所需的图像的自上而下的俯视图。当我使用相同的透视矩阵和参数并且仅更改图像时,新图像不会以相同的方式变形。如果透视矩阵相同,则Perspective不应该以相同的方式扭曲图像。 任何帮助将不胜感激。

(tl, tr, br, bl) = rect # points I scan in

widthA   =  np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
widthB   =  np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
maxWidth =  max(int(widthA), int(widthB))
heightA  =  np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
heightB  =  np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
maxHeight  =  max(int(heightA), int(heightB))



  dst = np.array([
        [0, 0],
        [maxWidth - 1, 0],
        [maxWidth - 1, maxHeight - 1],
        [0, maxHeight - 1]], dtype = "float32")



M = cv2.getPerspectiveTransform(rect, dst)

#I add 2000 to zoom out of the picture
warped = cv2.warpPerspective(image, (maxWidth+2000,maxHeight+2000))

当我在这张图片上运行代码

Original

这就是我想要的

warped image

当我重用矩阵时,我在此图像上进入了getPerspectiveTransform 2nd Image

我明白了

Bad warped image

我知道透视图应该视而不见,因为透视图矩阵是从原始图像中获取的,但是我认为第二个变形图像应具有与原始变形图像相同的大小。

我将在其他几张图像上重用相同的透视矩阵,以获取鸟瞰图,因此必须使图像的大小相同。

0 个答案:

没有答案