OpenCV-Python開発ガイド(13)---幾何学的変換の展望

より複雑なアフィンの変更

前回のブログ投稿では、2つの最も基本的なアフィン変換である平行移動と回転について説明しました。ただし、OpenCVには、アフィン関数cv2.warpAffine()で使用される変換行列Mを生成する関数cv2.getAffineTransform()も用意されています。

この関数の定義は次のとおりです。

def getAffineTransform(src, dst): 

src:入力画像を表す3点座標

dst:出力画像を表す3点座標

PSを使用したことのある人は、ショートカットキーCtrl + Tを使用して画像を自由にプルできることを知っています。これは、画像の上下左右に4つのポイントがあり、ポジショニングを担当するためです。srcの3つの座標、つまり左上隅、右上隅、左下隅はPSとまったく同じです。欠落している点は1つだけですが、配置は十分です。もちろん、マッピングでできるのは1つの座標が欠落しているため、平行四辺形になります。

次に、画像を自由に見つけて、引っ張る効果を実現しましょう。

import cv2
import numpy as np

img = cv2.imread("4.jpg")
rows,cols,ch = img.shape
p1=np.float32([[0,0],[cols-1,0],[0,rows-1]])
p2=np.float32([[0,rows*0.33],[cols*0.85,rows*0.25],[cols*0.15,rows*0.7]])
M = cv2.getAffineTransform(p1,p2)
move_img = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()

実行後の効果は次の図のようになります
画像を変換する
。p1は元の画像の座標であり、ここに少し変換があります。元の画像の座標は、左上隅[0,0]、右上隅[cols、0]、および左下隅[0、rows]です。変換された座標は、左上隅[0、行0.33]、右上隅[列0.85、行0.25]、および左下隅[列0.15、行* 0.7]です。

視点

上記の平行四辺形のアフィンを説明する理由は、私たちの遠近法が任意の四辺形であり、上記のコードを通して遠近法の概念を理解しやすいためです。

OpenCVでは、パースペクティブ変換は関数cv2.warpPerspective()によって実装されます。これは次のように定義されています。

def warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None):

src:遠近法となる元の画像

M:透視画像を変換するための3 * 3変換行列

dsize:出力画像のサイズを表します

flags、borderMode、borderValueの3つのパラメーターは、前のパラメーターと似ています。ここでは紹介しません。

以下では、上記の画像を任意の四辺形に変換します。具体的なコードは次のとおりです。

import cv2
import numpy as np

img = cv2.imread("4.jpg")
rows, cols, ch = img.shape
p1 = np.float32([[0, 0], [cols, 0], [0, rows], [cols, rows]])
p2 = np.float32([[0, rows * 0.33], [cols * 0.85, rows * 0.25], [cols * 0.15, rows * 0.7], [cols * 0.85, rows * 0.85]])
M = cv2.getPerspectiveTransform(p1, p2)
move_img = cv2.warpPerspective(img, M, (cols, rows))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()

パースペクティブ関数warpPerspectiveは、getPerspectiveTransformを介して変換行列を取得します。実行後の効果は次のとおりです。
視点

おすすめ

転載: blog.csdn.net/liyuanjinglyj/article/details/113802729