我有一个带有坐标(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) 中是否有特定的函数来执行此操作,甚至是公式。
我搜索了很长一段时间,我似乎只能找到矩阵计算或函数来转换整个图像或数组。
最佳答案
如果我理解正确的话,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]]])
作为最后的建议,请注意输入点数组原始
的形状:它必须是一个 3D 数组,正如我发现的 here .
关于python - 带坐标的数组的透视变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27251138/