2014-12-02 149 views
0

我有一個座標(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)特定功能這樣做,甚至一個公式。

我在尋找相當長的一段時間,我似乎只能找到矩陣計算或函數來轉換整個圖像或數組。

回答

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