2017-09-04 267 views
0

我使用cv2.getRotationMatrix2D來獲取旋轉源圖像的2x3矩陣。這工作正常。現在我有幾個2D座標,它們代表未旋轉圖像中的點。 我可以使用相同的矩陣來旋轉單個點嗎?如果是,如何? 如果我理解正確的話,我應該能夠將矩陣與(x,y)座標相乘,但無論我嘗試使用哪種矩陣和點的組合,我都不會得到簡單的x和y座標。使用openCV和python旋轉2D點

感謝您的幫助!

編輯:

旋轉矩陣是

[[ 9.24630834e-01 3.80864571e-01 1.52747702e-01] 
[ -3.80864571e-01 9.24630834e-01 1.57068951e+02]] 

什麼我到目前爲止做:

point = np.array([marker.x, marker.y, 1]) 
transform = rot_matrix * point.T 
print transform 

但是這並沒有給我一個2×1矩陣,因爲它應該,但是:

[[ 2.10815830e+02 7.92198307e+01 1.52747702e-01] 
[ -8.68371221e+01 1.92323213e+02 1.57068951e+02]] 
+0

你可以包含幾行代碼段的定義的例子,只是我清楚如何解決它?我有一個想法如何做,但我需要看看你有什麼評論。 –

+0

感謝您的關注,FlashTek的回答給了我正確的提示。 –

回答

2

請檢查t他的site。由於cv2.getRotationMatrix2D創建了仿射變換,因此您可以編寫如下調用結果:

如果你現在要變換2D點你要計算這個表達式


這應該解決您的問題。 (所有圖片來自參考文檔頁面)

編輯:關於您的編輯:您不能使用*運算符,但應該使用np.dot()。運算符僅爲矩陣對象執行實數矩陣向量積。否則,它正在執行一個基於元素的產品。

+0

這或多或少是我做的,請檢查我的編輯。這應該是我想要做的最後一個等式,對吧? –

+0

@MaikFruhner看我的編輯。 – FlashTek

+0

謝謝!就是這樣.. –

0

這會幫你嗎?

定義兩個數組xArray和yArray與要變換

for indexItem in xrange(len(xArray)): 
    point = np.array([xArray[indexItem], yArray[indexItem], 1]) 
    transform = rot_matrix * point.T 
    print transform 

它不是很雄辯,但應該做的伎倆點。如果你真的想創建一個標記陣列,那麼你必須使用:

markers = zip(xArray, yArray)