1. ホーム
  2. パイソン

python の cv2.warpAffine() と cv2.warpPerspective() のパース処理の比較.

2022-03-01 20:16:32

1. cv2.warpAffine() 放射状変換関数、回転、平行移動、拡大縮小を実現可能、変換後も平行線は平行なまま

cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) --> dst

src : 入力画像 dst : 出力画像

M 2×3の変換行列

dsサイズ : 変換後の出力画像サイズ

フラグ : 補間方法

ボーダーモード : ボーダーピクセル拡大モード

ボーダーバリュー : ボーダーピクセル補間、デフォルトのパディングは0です。

変換行列 M は,関数 cv2.getAffineTransfrom(points1, points2) によって得ることができます.

変換行列は、変換前と変換後の点の座標を少なくとも3セット取ることで得られます。

例えば

points1 = np.float32([ [30,30], [100,40], [40,100] ])
points2 = np.float32([ [60,60], [40,100], [80,20] ])

M = cv2.getAffineTransform(points1, points2)
   = array([[-0.33333333, 0.33333333, 60. ],
             [ 0.66666667, -0.66666667, 60. ]])

Affine_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0])) 

  Affine_imgは、元のimg上の任意の点の、Mによって変換された画像に対する相対座標で、元のimgについて Affine_img上の任意の点の座標は、変換行列Mで変換することにより求めることができます。 変換方法は

まず3×1の行列を作る では

2、cv2.warpPerspective()透視変換関数は、直線が変形していない保つことができますが、平行線は、もはや平行かもしれません

cv2.warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) --> dst

関連するパラメータは,関数 cv2.warpAffine と同様であり,ここでは説明を省略します.

この変換行列は, cv2.getPerspectiveTransform() 関数によって得ることができます.これは, cv2.getAffineTransfrom() と同じ原理ですが,射影変換には,少なくとも変換前と変換後に対応する 4 組の点座標が必要であり,ここでは,元の地図の 4 点で行列 points1, 変換後の 4 点で行列 points2 とします.

というように。

points1 = np.float32([ [30,30], [10,40], [40,10], [5,15] ])
points2 = np.float32([ [0,0], [400,0], [0,400], [400,400] ])

M = cv2.getPerspectiveTransform(points1, points2)
  = array([[-9.08777969e+00, -4.54388985e+00, 4.08950086e+02],
           [-5.37005164e+00, -1.07401033e+01, 4.83304647e+02],
           [-1.15318417e-02, -1.35972461e-02, 1.00000000e+00]])

Perspective_img = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0])) 

同様に,元の画像上の任意の点の座標について Perspective_img上の任意の点の座標は、変換行列Mで変換することにより求めることができる 変換方法は

まず3×1の行列を作る では

また,回転・拡大縮小の変換行列 M は,関数 cv2.getRotationMatrix2D(center, angle, scale) によって求められ,その後,関数 cv2.warpAffine によって画像の回転・拡大縮小を行うことができます.

center: 回転中心; angle: 回転角度; scale: スケール