Pythonで透視変換

PythonとOpenCVを使った透視変換(Homology Transform)のコード例です。変換前後の4点ずつ、計8点からgetPerspectiveTransform関数によって3*3の変換行列を求め、warpPerspective関数によって画像を変換します。なお、今回は使っていませんが、逆行列はinvM = np.linalg.inv(M)というようにしてnumpyの関数で計算することができます。

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

img = cv2.imread('img.jpg')
rows,cols,ch = img.shape
print img.shape

pts1 = np.float32([[0,0],[cols,0],[0,rows],[cols,rows]])
pts2 = np.float32([[1000,0],[3160,500],[0,3120],[4160,3120]])

M = cv2.getPerspectiveTransform(pts1,pts2)
print M
dst = cv2.warpPerspective(img,M,(cols,rows))
cv2.imwrite("img_out.jpg", dst)

plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
(3120, 4160, 3)
[[ 6.64195537e-01 -3.20512821e-01 1.00000000e+03]
[ 1.43129771e-01 4.73355843e-01 -1.13686838e-13]
[ 4.58749266e-05 -1.68796204e-04 1.00000000e+00]]