python の cv2.warpAffine() と cv2.warpPerspective() のパース処理の比較.
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: スケール
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例