【问题标题】:Perspective transform of an array with coordinates带坐标的数组的透视变换
【发布时间】:2014-12-02 13:53:48
【问题描述】:

我有一个带有坐标 (2D) 的数组,并且想要在不同的四边形中计算新坐标。我只知道两个四边形的角。

例如,旧的四边形角坐标是

topleft(25,25), Topright(200,20), Botomleft(35,210), Botomright(215,200)

新的四边形:

Topleft(-50,50), Topright(50,50), Botomleft(-50,-50), Botomright(-50,-50)

opencv(cv2)中是否有特定的功能可以做到这一点,甚至是公式。

我搜索了很长一段时间,我似乎只能找到矩阵计算或函数来转换整个图像或数组。

【问题讨论】:

    标签: python opencv coordinates transform perspective


    【解决方案1】:

    如果我理解正确,opencv 有你需要的:

    首先,计算变换矩阵:

    import cv2
    import numpy as np
    src = np.array(((25, 25), (200, 20), (35, 210), (215, 200)), dtype=np.float32)
    dest = np.array(((-50, -50), (50, -50), (-50, 50), (50, 50)), dtype=np.float32)
    mtx = cv2.getPerspectiveTransform(src, dest)
    

    您会注意到我冒昧地让 dest 的方向与 src 的方向匹配,然后再计算变换(倒置顶部和底部)。

    现在该矩阵可用于转换任何点数组(在我们的例子中为二维):

    original = np.array([((42, 42), (30, 100), (150, 75))], dtype=np.float32)
    converted = cv2.perspectiveTransform(original, mtx)
    

    结果:

    >>> converted
    >>> array([[[-41.06365204 -40.27705765]
          [-49.48046112  -8.70405197]
          [ 18.60642052 -19.92881393]]])
    

    作为最后的建议,请注意输入点数组 original 的形状:它必须是 3D 数组,我发现 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多