Python openCV アフィン変換

アフィン変換とは線形変換(拡大縮小、剪断、回転)と並行移動を組み合わせたもの。
数学的には行列の1次変換とベクトルの和ですね。変換前の辺の長さの比が変換後も変わらない。
指定には変換前、変換後の各3点の座標が必要
(1,0)→(a,c) (0,1)→(b,d)に変換して(tx,ty)分並行移動するので3点分の情報がいるのは納得
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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カメラでバーコードリーダー

VB.net Dictionaryクラスの初期化