我有一个坐标(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)中是否有特定的功能,甚至是公式。
我正在寻找相当长的一段时间,我似乎只能找到矩阵计算或函数来转换整个图像或数组。
答案 0 :(得分: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
的一个。
现在矩阵可用于转换任何点数组(在我们的例子中为2D):
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。