Python openCV アフィン変換

アフィン変換とは線形変換(拡大縮小、剪断、回転)と並行移動を組み合わせたもの。
数学的には行列の1次変換とベクトルの和ですね。変換前の辺の長さの比が変換後も変わらない。
指定には変換前、変換後の各3点の座標が必要
(1,0)→(a,c) (0,1)→(b,d)に変換して(tx,ty)分並行移動するので3点分の情報がいるのは納得
import numpy as np
import cv2
import matplotlib.pyplot as plt

#Affine変換
img = cv2.imread("logo.png")
rows,cols,ch = img.shape

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])

M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))

plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()


コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

OpenCV 画像の足し算

OpenCV3とPython3で形状のある物体の輪郭と方向を認識する(主成分分析:PCA、固有ベクトル)